使用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()
?
答案 0 :(得分:55)
您可以使用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
)
)
这使用并保留了数组的现有结构,我猜你想要它。
答案 1 :(得分:14)
我可能会遍历原始数组并使它们成为一维......类似于
foreach($array1 as $aV){
$aTmp1[] = $aV['ITEM'];
}
foreach($array2 as $aV){
$aTmp2[] = $aV['ITEM'];
}
$new_array = array_diff($aTmp1,$aTmp2);
答案 2 :(得分:11)
使用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);
答案 3 :(得分:6)
使用array_filter
的一些解决方案对于大型数组的性能低于the array_udiff
solution,但更简单,更灵活:
$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
c.moveToFirst();
if (c != null) {
while (c.moveToNext()) {
致电。
答案 4 :(得分:1)
您可以使用以下代码来获得差异
$a1 = Array(
[0] => Array(
[ITEM] => 1
)
[1] => Array(
[ITEM] => 2
)
[2] => Array(
[ITEM] => 3
)
);
$a2 = Array(
[0] => Array(
[ITEM] => 2
)
[1] => Array(
[ITEM] => 3
)
[2] => Array(
[ITEM] => 1
)
[3] => Array(
[ITEM] => 4
));
array_diff(array_column($a1, 'ITEM'), array_column($a2, 'ITEM'));
答案 5 :(得分:1)
有同样的问题,但是我的多维数组在每个数组中都有与您的“ ITEM”不同的各种键。
使用$result = array_diff_assoc($array2, $array1);
答案 6 :(得分:0)
将array1与一个或多个其他数组进行比较,并返回array1中其他数组中不存在的值。
//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);
答案 7 :(得分:0)
另一种解决方案 if( json_encode($array1) == json_encode($array2) ){ ... }