PHP - “双向”递归array_diff_key()

时间:2015-08-17 16:06:01

标签: php arrays recursion

我想在2个多维数组上应用 array_diff_key()递归,并找出它们之间的区别。

重要的是该功能将是“双向”,因此 foo($ a,$ b) foo($ b,$ a)< / strong>将产生相同的结果

我试过了什么?说实话,我尝试了很多东西(包括来自http://php.net/manual/en/function.array-diff-key.php的例子)并迷失了。

function superMatch($a1, $a2) {

    foreach($a1 as $k => $v) {
        $r[$k] = is_array($v) ? superMatch($a1[$k], $a2[$k]) : array_diff_key($a1, $a2);
    }

    return $r;
}

输入:

$a = array('a' => 'a', 'b' => 'b', 'c' => array('d' => 'd', 'e' => 'e'));
$a = array('a' => 'a', 'b' => 'b', 'c' => array('t' => 'd', 'e' => 'e'));

预期输出:'t'

有人可以给我一个线索吗?

1 个答案:

答案 0 :(得分:1)

你声明你想要双向递归的键的递归差异,所以给出你的输入:

'starting point- array with 8 elements
Dim arrStart(8) As Double
    arrStart(8) = 1     'here- for testing with Local window

'passing array to another...Variant type variable
    'no array declaration required
Dim arrVariant As Variant
    arrVariant = arrStart

'passing array to another Double variable
    'dynamic array declaration required
Dim arrEmpty() As Double
    arrEmpty = arrStart

你应该得到输出:

$a = array('a' => 'a', 'b' => 'b', 'c' => array('d' => 'd', 'e' => 'e'));
$b = array('a' => 'a', 'b' => 'b', 'c' => array('t' => 'd', 'e' => 'e'));

以下方法将返回输出的第一个版本。但是,你在你的问题中说,它应该只输出$output = array('c'=>array('d'=>'d','t'=>'d')); //or $output = array('t'=>'d','d'=>'d'); ,这是没有意义的,因为它不可能双向工作(因为键t也不匹配)。

d

哦,这是你的小例子输入的example of it working