【问题标题】:array difference阵列差异
【发布时间】:2011-04-21 22:30:45
【问题描述】:

我需要得到这两个数组之间的区别,我试过array_diff($array1,$array2)但没有成功,知道吗?

数组1

Array
(
    [0] => Array
        (
            [status] => 61192106047320064
        )

    [1] => Array
        (
            [status] => 61185038284357632
        )

    [2] => Array
        (
            [status] => 61182890951720960
        )

)

数组2

Array
(
    [0] => Array
        (
            [status] => 61185038284357632
        )

    [1] => Array
        (
            [status] => 61182890951720960
        )

)

提前致谢。

【问题讨论】:

  • 定义差异是否需要所有差异,或者如果 array1[0] == array2[0] 是否需要打印差异。显示您尝试过的一些代码。你搜索数组的算法是什么...
  • 您如何准确定义差异?设置差异,对称差异,元素必须具有相同的数组位置,...?您期望结果是什么?
  • 第一个数组有新的结果,第二个是比较值而不是索引,我需要获取数组之间的差异并将结果放入数据库,期望来自第一个数组的 [status] => 61192106047320064 .
  • 检查 php.net/manual/en/function.array-diff.php 的 cmets 以获得多维数组差异。
  • array_diff 有什么问题?

标签: php arrays


【解决方案1】:

也许我理解错了,但你不能针对你的具体问题做这样的事情吗?

$newStatuses = array();

foreach($array1 as $element1) {
    foreach($array2 as $element2) {
        if($element1['status'] == $element2['status']) {
            continue 2;
        }
    }

    $newStatuses[] = $element1;
}

$newStatuses 的每个元素都是一个数组,其中包含来自 array1 的“status”元素,但该元素不在 array2 中。

所以,$newStatuses 应该是这样的:

Array
(
    [0] => Array
        (
            [status] => 61192106047320064
        )

)

【讨论】:

    【解决方案2】:

    根据array_diff

    此函数仅检查 n 维数组的一维。当然,您可以使用 array_diff($array1[0], $array2[0]); 来检查更深的维度。

    因此你不能直接区分这些数组的第二维。

    相反,也许您可​​以使用array_map 提取status 值,另存为两个一维数组,然后是array_diff。如果您有多个键,请使用 for 循环。

    【讨论】:

      【解决方案3】:

      看看这段代码,它是 cakephp 的一部分,但你可以修改/删除它

      https://github.com/cakephp/cakephp/blob/master/cake/libs/set.php#L792

      和文档

      http://book.cakephp.org/view/1496/diff

      【讨论】:

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