根据指定的二级值比较二维数据集

我有一个包含关联数据行的数组。

$array1 = array(
    array('ITEM' => 1),
    array('ITEM' => 2),
    array('ITEM' => 3),
);

我有第二个数组,也包含关联数据的行,我想使用第一个数组进行筛选。

$array2 = array(
    array('ITEM' => 2),
    array('ITEM' => 3),
    array('ITEM' => 1),
    array('ITEM' => 4),
);

这感觉像是一项工作,但是我如何才能仅在更深层的值上比较行?array_diff()ITEM

如何过滤第二个数组并得到以下结果?

array(3 => array('ITEM' => 4))

答案 1

您可以使用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
        )
)

这使用并保留了数组的现有结构,我假设你想要。


答案 2

我可能会迭代原始数组并使它们成为一维数组...类似的东西

foreach($array1 as $aV){
    $aTmp1[] = $aV['ITEM'];
}

foreach($array2 as $aV){
    $aTmp2[] = $aV['ITEM'];
}

$new_array = array_diff($aTmp1,$aTmp2);

推荐