Heim > Artikel > Backend-Entwicklung > Array-Neugruppierung
1, Wie konvertiere ich das Array arr1 in arr2?
arr1 = [
<code>['tracking1','abc@qq.com','80'], ['tracking1','abc@qq.com','50'], ['tracking2','efg@qq.com','60'], ['tracking2','efg@qq.com','30'],</code>
];
arr2 = [
<code>['tracking1','abc@qq.com',['80','50']], ['tracking2','efg@qq.com',['60','30']],</code>
];
1, Wie konvertiere ich das Array arr1 in arr2?
arr1 = [
<code>['tracking1','abc@qq.com','80'], ['tracking1','abc@qq.com','50'], ['tracking2','efg@qq.com','60'], ['tracking2','efg@qq.com','30'],</code>
];
arr2 = [
<code>['tracking1','abc@qq.com',['80','50']], ['tracking2','efg@qq.com',['60','30']],</code>
];
Die Idee ist sehr einfach, das heißt, den Wert der ersten und ersten Spalte des Arrays als eindeutigen Wert zu schreiben. key
Ich finde, dass der obige Code etwas zu viel ist 🎜>
<code>$arr1 = [ ['tracking1','abc@qq.com','80'], ['tracking1','abc@qq.com','50'], ['tracking2','efg@qq.com','60'], ['tracking2','efg@qq.com','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>
Lassen Sie mich zunächst eine Vorstellung davon bekommen, ob arr1[0] gleich ist. Wenn sie gleich sind, stellen Sie fest, ob [1] gleich ist Wenn sie gleich sind, fügen Sie die Werte ein. Wenn sie unterschiedlich sind, fügen Sie sie in einem Array zusammen
14 Zeilen Funktionscode, seien Sie nicht zu einfach.
<code>$arr = [['tracking1','abc@qq.com','80'], ['tracking1','abc@qq.com','50'], ['tracking2','efg@qq.com','60'], ['tracking2','efg@qq.com','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>
Lassen Sie mich Ihnen meine Gedanken mitteilen. Das betreffende Array ist tatsächlich in zwei Teile unterteilt, die Werte v0, v1 und v2 in jedem Array.
<code>$new = array(); $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>