首页 > 解决方案 > 改变数组顺序的数组的递归差分

问题描述

我知道这里有很多类似的问题,但我真的认为这个问题与其他问题不同。我有2个这样的数组:

阵列 1

Array
(
    [0] => Array
        (
            [name] => aaaa
            [projectId] => 0
            [area] => AreaX
        )

    [1] => Array
        (
            [name] => cccc
            [projectId] => 2
            [area] => 
        )

)

阵列 2

Array
(
    [0] => Array
        (
            [name] => cccc
            [projectId] => 1
            [area] => 
        )

    [1] => Array
        (
            [name] => aaaa
            [projectId] => 0
            [area] => AreaX
        )

)

我需要的

Array
(
    [1] => Array
        (
            [projectId] => 2
        )

)

我阅读并测试了许多类似问题的建议,但它们都返回整个数组或完全不同的东西。我尝试过的一些相关功能:1 , 2 , 3 , 4 , 5 , 6 , 7。我意识到主要问题与数组的位置有关。当我重新排列它们时,功能可以完美运行(我目前使用的是数字 3),但是我在这里的情况不允许这种重组。

标签: phparraysdifference

解决方案


您可以通过使用array_diff,array_column和来实现array_map

$col = "projectId";
$res = array_diff(array_column($a, $col), array_column($b, $col));
$res = array_map(function($id) use ($col) {return [$col => $id];}, $res);

参考:array-diffarray-columnarray_map

现场示例:3v4l


推荐阅读