• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

数组重新组合

php 搞代码 3年前 (2022-01-22) 17次浏览 已收录 0个评论
文章目录[隐藏]

1,如何将数组arr1转化成arr2?

arr1 = [

<code>['tracking1','[email protected]','80'],['tracking1','[email protected]','50'],['tracking2','[email protected]','60'],['tracking2','[email protected]','30'],</code>

];

arr2 = [

<code>['tracking1','[email protected]',['80','50']],['tracking2','[email protected]',['60','30']],</code>

];

回复内容:

1,如何将数组arr1转化成arr2?

arr1 = [

<code>['tracking1','[email protected]','80'],['tracking1','[email protected]','50'],['tracking2','[email protected]','60'],['tracking2','[email protected]','30'],</code>

];

arr2 = [

<code>['tracking1','[email protected]',['80','50']],['tracking2','[email protected]',['60','30']],</code>

];

思路很简单,就是把数组的第一和第一列的值作为一个唯一key写入,感觉楼上代码有点多,简洁代码如下

<code>$arr1 = [    ['tracking1','[email protected]','80'],    ['tracking1','[email protected]','50'],    ['tracking2','[email protected]','60'],    ['tracking2','[email protected]','30'],];$arr2 = [];foreach ($arr1 as $data) {    list($account,$mail,$val) = $data;    isset($arr2[$account.$mail]) || $arr2[$account.$mail]=[$account,$mail,[]];    array_push($arr2[$account.$mail][2],$val);}$arr2 = array_values($arr2);var_dump($arr2);</code>

我给个思路,先遍历判断arr1[0]是否一样,一样就往一个新数组中插入,在这基础判断[1]是否相同,相同就插入值,不同则合并成一个数组,以此类推

<code>$arr = [['tracking1','[email protected]','80'],['tracking1','[email protected]','50'],['tracking2','[email protected]','60'],['tracking2','[email protected]','30']];$finalArr = [[[]]];$mailArr =[];foreach ($arr as $k=>$v){    $mailKey = array_search($v[1],$mailArr);    if($mailKey!==false){        array_push($finalArr[$mailKey][2],$v[2]);    }else{        $finalArr[$k] = $v;        $finalArr[$k][2] = [$v[2]];        $mailArr[$k]=$v[1];    }}$finalArr = array_values($finalArr);var_dump($finalArr);</code>

14行功能代码,不要太简单。

说下我的思路,题主这个数组,拆分开其实就是两个部分,每个数组里的v0、v1值,和v2值。

<code>$new = a<i style="color:transparent">@本文来源gaodai$ma#com搞$代*码6网</i><b>搞代gaodaima码</b>rray(); $flag = 1;foreach ($arr as $key => $value) {  $newss[$value[0].'-'.$value[1]][] = $value[2];  //取出重复小标0 1的值   $news = array($value[0], $value[1]);  foreach ($new as $k => $v) {    if(!array_diff($v,$news )) { //如果      $flag = 2;      break;    }  }  if($flag == 1) {    $new[] = array($value[0], $value[1]);  }  $flag = 1;}foreach ($new as $key => $value) {  $new[$key][2] = $newss[$value[0].'-'.$value[1]];}var_dump($new);exit;</code>

<code>    $arr1 = [            ['tracking1','[email protected]','80'],        ['tracking1','[email protected]','50'],        ['tracking2','[email protected]','60'],        ['tracking2','[email protected]','30'],    ];        $arr2 = [        ['tracking1','[email protected]',['80','50']],        ['tracking2','[email protected]',['60','30']],    ];    define("CUSTOM_SEPA", "_");    function t($a0){        $r = [];        $res = [];        foreach($a0 as $v){            $r[$v[0].CUSTOM_SEPA.$v[1]][] = $v[2];        }        foreach($r as $k=>$v){            $s = explode(CUSTOM_SEPA, $k);            $s[] = $v;            $res[] = $s;        }        return $res;    }    $res = t($arr1);    print_r($res == $arr2);</code>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:数组重新组合

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址