我已经提出了这个解决方案,这对于普通数组而言工作正常,但对于多维数组却无法解决。
$a = ['a'=>11, 'b'=>2,'c'=>['r'=>5,'s'=>8]];
$b = ['a'=>1, 'b'=>2, 'c'=>['r'=>15,'s'=>18]];
function array_equal($a, $b) {
return (
is_array($a)
&& is_array($b)
&& count($a) == count($b)
&& array_diff_key($a, $b) === array_diff_key($b, $a)
);
}
$c = array_equal($a,$b);
echo $c;
对于上述数组集,它工作正常。
但是对于以下数组,即使键不同,它也会返回1。
$a = ['a'=>11, 'b'=>2,'c'=>['r'=>5,'s'=>8]];
$b = ['a'=>1, 'b'=>2, 'c'=>['r1'=>15,'m'=>18]];
答案 0 :(得分:3)
如果阵列键的顺序相同,这将起作用:
<?php
function array_keys_recursive(array $array) : array
{
foreach ($array as $key => $value) {
if (is_array($value)) {
$index[$key] = array_keys_recursive($value);
} else {
$index []= $key;
}
}
return $index ?? [];
}
$a = ['a'=>11, 'b'=>2,'c'=>['r'=>5,'s'=>8]];
$b = ['a'=>1, 'b'=>2, 'c'=>['r'=>15,'s'=>18]];
var_dump(array_keys_recursive($a) === array_keys_recursive($b)); // true
$a = ['a'=>11, 'b'=>2,'c'=>['r'=>5,'s'=>8]];
$b = ['a'=>1, 'c'=>2, 'b'=>['r'=>15,'s'=>18]];
var_dump(array_keys_recursive($a) === array_keys_recursive($b)); // false
$a = ['a'=>11, 'b'=>2,'c'=>['r'=>5,'s'=>8]];
$b = ['a'=>1, 'b'=>2, 'c'=>['r1'=>15,'m'=>18]];
var_dump(array_keys_recursive($a) === array_keys_recursive($b)); // false
答案 1 :(得分:1)
这应该有效-
function array_equal($a, $b) {
// count mismatch -> not equal
if (count($a) != count($b)) {
return false;
}
foreach ($a as $key => $val) {
// key not present -> not equal
if (empty($b[$key])) {
return false;
}
// check for inner arrays
if (is_array($val)) {
return array_equal($val, $b[$key]);
}
}
return true;
}
array_equal($a, $b); // true for first arrays
$a = ['a'=>11, 'b'=>2,'c'=>['r'=>5,'s'=>8]];
$b = ['a'=>1, 'b'=>2, 'c'=>['r1'=>15,'m'=>18]];
array_equal($a, $b); // false
答案 2 :(得分:0)
我正在阅读您的问题,因为您想检查相同的键结构,但不在乎值。
我在这里通过将两个数组的所有叶子值都更改为null来作弊,然后您可以比较剩余的食物。
<?php
$a = ['a'=>11, 'b'=>2, 'c'=> ['r'=>5, 's'=>8 ]];
$b = ['a'=>1, 'b'=>2, 'c'=> ['r'=>15,'s'=>18]];
function arrays_have_same_keys(array $a, array $b) {
array_walk_recursive($a, function(&$v) {
$v = null;
});
array_walk_recursive($b, function(&$v) {
$v = null;
});
return $a==$b;
}
var_dump(arrays_have_same_keys($a, $b));
输出:
bool(true)