【问题标题】:php compare two nested array and predict the differencephp比较两个嵌套数组并预测差异
【发布时间】:2014-07-15 02:15:45
【问题描述】:

如何找出两个数组的差异

// ARRAY 1

$a1 = array(
    "a1" => 1,
    "a3" => array(
        "a31" => 31
    ),
    "a4" => array(
        "a41" => 41
    ),
    "a5" => array(
        "a51" => 51,
        "a52" => 52
    )
);

// ARRAY 2
$a2 = array(
    "a1" => 1,
    "a2" => 2,
    "a3" => array(
        "a31" => 31,
        "a32" => array(
            "a321" => 321,
            "a322" => 322
        )
    ),
    "a4" => array(
        "a41" => 42
    ),
    "a5" => array(
        "a51" => 51,
        "a52" => 52
    )
);

array_diff 函数返回 ==> Array ( )

但是上面两个数组变量有很大的不同。

示例:

  1. 在 ARRAY1 中没有键 a2,但在 ARRAY2 中 a2 可用。
  2. ARRAY2 a3 包含嵌套数组(一个嵌套级别),但在 ARRAY 2 中包含两个嵌套子级别。

所以这里我想比较两个数组 n 级(即嵌套数组)

【问题讨论】:

  • 您的预期输出是什么?
  • 对于上述示例,系统应该说不同,
  • array_diff() 只支持一维
  • 对于递归,存在一个similar, answered question。请注意,两个方向的“差异”不能在单个数组中表示,因为您都有“减去”和“添加”成员。如果您想将这些更改合并到一个数组中(无论键是“添加”还是“减去”),您可以array_merge_recursive(array_diff_recursive($a1, $a2), array_diff_recursive($a2, $a1)) (documentation)

标签: php arrays


【解决方案1】:
$results = array_diff(array_map('serialize',$a2),array_map('serialize',$a1));
$results = array_map('unserialize',$results);

echo '<pre>';
print_r($results);

【讨论】:

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