【问题标题】:Recursive Difference of Arrays with Changed Array Order [duplicate]具有更改数组顺序的数组的递归差分[重复]
【发布时间】:2019-08-15 22:29:37
【问题描述】:

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

)

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

【问题讨论】:

  • 逻辑是什么?
  • 有什么可以唯一标识内部数组的吗?否则,当任何或所有键都可能被更改时,你怎么知道其中一个应该是另一个的更改版本?

标签: php arrays difference


【解决方案1】:

您可以通过使用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-diffarray-columnarray_map

现场示例:3v4l

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多