改变数组顺序的数组的递归差分

Recursive Difference of Arrays with Changed Array Order

我知道这里有很多类似的问题,但我真的认为这个问题与其他问题不同。我有 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
        )

)

我阅读并测试了很多来自类似问题的建议,但所有这些 return 整个数组或完全不同的东西。我尝试过的一些相关功能:1, 2, 3, , , 6, 。我意识到主要问题与数组的位置有关。当我重新排列它们时,功能完美地工作(我目前使用数字 3),但我这里的情况不允许这种重组。

您可以使用 array_diffarray_columnarray_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-diff, array-column, array_map

实例:3v4l