我如何找到具有一个公用密钥的两个关联数组之间的差异

时间:2019-07-12 07:08:42

标签: php arrays php-7.2

我在Magento 2.3中工作,我有两个数组

第一个数组:

Array
(
    [0] => Array
        (
            [name] => /l/u/luma-foam-roller.jpg
            [image_id] => luma-foam-roller.jpg
        )

    [1] => Array
        (
            [name] => /l/u/luma-yoga-strap-set.jpg
            [image_id] => luma-yoga-strap-set.jpg
        )

    [2] => Array
        (
            [name] => /m/b/mb04-black-0.jpg
            [image_id] => mb04-black-0.jpg
        )

    [3] => Array
        (
            [name] => /l/u/luma-stability-ball-pink.jpg
            [image_id] => luma-stability-ball-pink.jpg
        )

    [4] => Array
        (
            [name] => /m/b/mb01-blue-0.jpg
            [image_id] => mb01-blue-0.jpg
        )
}

第二个数组:

Array
(
    [0] => Array
        (
            [name] => /m/b/mb01-blue-0.jpg
        )

    [1] => Array
        (
            [name] => /m/b/mb04-black-0.jpg
        )

    [2] => Array
        (
            [name] => /m/b/mb04-black-0_alt1.jpg
        )

    [3] => Array
        (
            [name] => /m/b/mb03-black-0.jpg
        )

    [4] => Array
        (
            [name] => /m/b/mb03-black-0_alt1.jpg
        )
}
我想在名字的基础上找到区别 对我来说,预期结果是

Array
(
    [0] => Array
        (
            [name] => /l/u/luma-foam-roller.jpg
            [image_id] => luma-foam-roller.jpg
        )

    [1] => Array
        (
            [name] => /l/u/luma-yoga-strap-set.jpg
            [image_id] => luma-yoga-strap-set.jpg
        )


    [3] => Array
        (
            [name] => /l/u/luma-stability-ball-pink.jpg
            [image_id] => luma-stability-ball-pink.jpg
        )

}

我尝试了以下功能,但是没有一个对我有用

  • array_diff()
  • array_diff_assoc()
  • array_unique(array_merge($ array1,$ array2),SORT_REGULAR);

但没有成功

2 个答案:

答案 0 :(得分:1)

我想不出有一个班轮函数可以自动执行此操作,但是一种简单的方法就是使用循环。

$names = array_column($second, 'name');
$diff = array();
foreach ($first as $k => $values) {
    if (!in_array($values['name'], $names)) {
        $diff[$k] = $values;
    }
}
// print_r($diff);

基本上,您只需首先获得所有名称(通过array_column并使其平整即可,这样您就可以利用in_array进行搜索和比较。

这时,这只是谦虚的foreachif。本示例创建差异的新副本。如果您不想创建另一个副本,则可以unset()第一个数组并反转条件,而只保留原始数组中的区别。

答案 1 :(得分:1)

array_udiff可以帮助您

function compare_by_name($a, $b) {
    $nameA = isset($a['name']) ? $a['name'] : '';
    $nameB = isset($b['name']) ? $b['name'] : '';

    return strcmp($nameA, $nameB);
}

print_r(array_udiff($arr1, $arr2, 'compare_by_name'));