array_diff()与multidimensional array
使用array_diff() ,我可以比较和删除相似的项目,但如果我有以下数组呢? 
数组1
 Array ( [0] => Array ( [ITEM] => 1 ) [1] => Array ( [ITEM] => 2 ) [2] => Array ( [ITEM] => 3 ) ) 
ARRAY2
 Array ( [0] => Array ( [ITEM] => 2 ) [1] => Array ( [ITEM] => 3 ) [2] => Array ( [ITEM] => 1 ) [3] => Array ( [ITEM] => 4 ) ) 
 我想过滤出类似的物品; 结果应该返回4.如何重新排列我的数组,以便我可以使用array_diff() ? 
我可能会遍历原始数组,并使它们成为一维…类似的东西
 foreach($array1 as $aV){ $aTmp1[] = $aV['ITEM']; } foreach($array2 as $aV){ $aTmp2[] = $aV['ITEM']; } $new_array = array_diff($aTmp1,$aTmp2); 
 你可以使用array_udiff()来定义一个自定义的比较函数。 
 function udiffCompare($a, $b) { return $a['ITEM'] - $b['ITEM']; } $arrdiff = array_udiff($arr2, $arr1, 'udiffCompare'); print_r($arrdiff); 
输出:
 Array ( [3] => Array ( [ITEM] => 4 ) ) 
这使用和保留arrays的现有结构,我想你想要的。
 使用array_filter几个解决scheme比array_udiff解决scheme对于大型数组性能要差一些,但是它们更直接,更灵活: 
 $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; }); 
 和array_filter ,请注意array_filter保留了原始数组的键,所以如果你想$arrayDiff是零索引的话,可以这样做: $arrayDiff = array_values($arrayDiff); 在array_filter调用之后。 
  json_encode技巧的另一个有趣的方法(如果你需要“原始”比较第一级数组中的一些复杂的值,可以是有用的): 
 // 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);