array_diff() with multidimensional arrays
使用
阵列1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
数组2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
我想过滤掉类似的物品; 结果应该返回4。如何重新排列数组,以便可以使用
您可以使用
1 2 3 4 5 6 7 | function udiffCompare($a, $b) { return $a['ITEM'] - $b['ITEM']; } $arrdiff = array_udiff($arr2, $arr1, 'udiffCompare'); print_r($arrdiff); |
输出:
这使用并保留了数组的现有结构,我认为这是您想要的。
我可能会遍历原始数组并使它们成为一维的...类似
1 2 3 4 5 6 7 8 9 | foreach($array1 as $aV){ $aTmp1[] = $aV['ITEM']; } foreach($array2 as $aV){ $aTmp2[] = $aV['ITEM']; } $new_array = array_diff($aTmp1,$aTmp2); |
1 2 3 4 5 | // Compare all values by a json_encode $diff = array_diff(array_map('json_encode', $array1), array_map('json_encode', $array2)); // Json decode the result $diff = array_map('json_decode', $diff); |
对于大型数组,使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | $array1 = [ ['ITEM' => 1], ['ITEM' => 2], ['ITEM' => 3], ]; $array2 = [ ['ITEM' => 2], ['ITEM' => 3], ['ITEM' => 1], ['ITEM' => 4], ]; $arrayDiff = array_filter($array2, function ($element) use ($array1) { return !in_array($element, $array1); }); // OR $arrayDiff = array_filter($array2, function ($array2Element) use ($array1) { foreach ($array1 as $array1Element) { if ($array1Element['ITEM'] == $array2Element['ITEM']) { return false; } } return true; }); |
与
您可以使用以下代码获得差异
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
有同样的问题,但是我的多维数组在每个数组中都有与您的" ITEM"不同的各种键。
解决方法:
参考:PHP:array_diff_assoc
将array1与一个或多个其他数组进行比较,并返回array1中其他任何数组中不存在的值。
1 2 3 4 5 6 7 | //Enter your code here, enjoy! $array1 = array("a" =>"green","red","blue"); $array2 = array("b" =>"green","yellow","red"); $result = array_diff($array1, $array2); print_r($result); |