Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组仅在键上递归(多维)差异_Php_Arrays - Fatal编程技术网

PHP数组仅在键上递归(多维)差异

PHP数组仅在键上递归(多维)差异,php,arrays,Php,Arrays,我想提取一个数组,比较两个多维数组的结构和键 例如: <?php $array_1 = ['abc'=> '', 'def'=> ['', '', [ 'ijk' => ''] ] ]; $array_2 = ['abc'=> '', 'def'=> ['', '', [ 'ijK' => ''] ] ]; 我想要一个数组diff,告诉我键'ijK'与第一个数组中的'ijK'不相同或不存

我想提取一个数组,比较两个多维数组的结构和键

例如:

<?php
$array_1 =
['abc'=> '',
    'def'=> ['', '', [
        'ijk' => '']
    ]
];

$array_2 =
['abc'=> '',
    'def'=> ['', '', [
        'ijK' => '']
    ]
];
我想要一个数组diff,告诉我键'ijK'与第一个数组中的'ijK'不相同或不存在

只有键对我来说很重要。值总是空的。

如果键ijK出现在另一个级别的第一个数组上?如果键ijK出现在另一个级别的第一个数组上?
function array_key_recursive_compare($array1, $array2) {
    $diff = false;
        // Left-to-right
        foreach ($array1 as $key => $value) {
            if (!array_key_exists($key,$array2)) {
                $diff[0][$key] = $value;
            } elseif (is_array($value)) {
                if (!is_array($array2[$key])) {
                    $diff[0][$key] = $value;
                    $diff[1][$key] = $array2[$key];
                } else {
                    $new = array_compare($value, $array2[$key]);
                    if ($new !== false) {
                        if (isset($new[0]))
                            $diff[0][$key] = $new[0];
                        if (isset($new[1]))
                            $diff[1][$key] = $new[1];
                    };
                };
            } elseif ($array2[$key] !== $value) {
                $diff[0][$key] = $value;
                $diff[1][$key] = $array2[$key];
            };
        };
        // Right-to-left
        foreach ($array2 as $key => $value) {
            if (!array_key_exists($key,$array1)) {
                $diff[1][$key] = $value;
            }
            // No direct comparison because matching keys were compared in the
            // left-to-right loop earlier, recursively.
        }
        return $diff;
    }