【问题标题】:PHP - array_diff() missing a recordPHP - array_diff() 缺少一条记录
【发布时间】:2019-10-26 20:40:43
【问题描述】:

我有两个关联数组:

$indexedProducts =

[0] => Array
    (
        [id] => 6662
    )

[1] => Array
    (
        [id] => 6656
    )

[2] => Array
    (
        [id] => 6657
    )

[3] => Array
    (
        [id] => 6527
    )

[4] => Array
    (
        [id] => 6528
    )

[5] => Array
    (
        [id] => 6529
    )

和 $categoryProducts =

[0] => Array
    (
        [id] => 6527
    )

[1] => Array
    (
        [id] => 6528
    )

[2] => Array
    (
        [id] => 6529
    )

然后我正在运行这个命令:

$difference = array_diff($indexedProducts[0], $categoryProducts[0]);

我期望的结果是一个包含 6662,6656 和 6657 值的数组:

[0] => Array
    (
        [id] => 6662
    )

[1] => Array
    (
        [id] => 6656
    )

[2] => Array
    (
        [id] => 6657
    )

因为这些都出现在第一个数组中而不是第二个数组中。

我收到的结果

[id] => 6662

它似乎停在第一个未找到的索引处。

我哪里出了问题?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    您真正需要区分的是两个多数组中的 ID 列:

    array_diff(
        array_column($indexedProducts, 'id'),
        array_column($categoryProducts, 'id')
    );
    

    【讨论】:

      【解决方案2】:

      Array_diff 仅适用于平面数组。

      使用 array_column 使数组变平,然后再对它们进行差异化。

      var_dump(array_diff(array_column($indexedProducts, "id"), array_column($categoryProducts, "id")));
      //[6662,6656,6657]
      

      https://3v4l.org/5fsLE

      【讨论】:

        猜你喜欢
        • 2012-04-01
        • 1970-01-01
        • 2020-09-07
        • 1970-01-01
        • 2014-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多