假设我们有两个关联数组:
<?php
$array1 = array(
1 => 2,
2 => 1,
);
$array2 = array(
2 => 1,
1 => 2,
);
这些数组包含相同的元素,但顺序不同。我想编写一个比较函数,只有在以下情况下才会返回true:
- 数组具有相同的键值对。
- 键值对的顺序相同。
因此,我尝试了以下方法:
第一次尝试
if ($array1 == $array2)
{
print "equal\n";
}
输出结果:相等
第二次尝试
print count(array_diff_assoc($array1, $array1));
打印: 0
我的自定义函数
然后我创建了以下函数:
function compare(&$array1, &$array2)
{
$n1 = count($array1);
$n2 = count($array2);
if ($n1 == $n2)
{
$keys1 = array_keys($array1);
$keys2 = array_keys($array2);
for ($i = 0; $i < $n1; ++$i)
{
if ($keys1[$i] == $keys2[$i])
{
if ($array1[$keys1[$i]] != $array2[$keys2[$i]])
{
return false;
}
}
else
{
return false;
}
}
return true;
}
else
{
return false;
}
}
这段代码在正常情况下是有效的,但当我们想针对嵌套的数组应用严格比较时,由于 if 语句中的 !=
运算符,它将无法正常工作:
if ($array1[$keys1[$i]] != $array2[$keys2[$i]])
{
return false;
}
可以使用递归函数,根据数据类型进行切换来解决这个问题。但是对我来说,这个简化版本已经足够好了。
是否有标准的解决方案来处理这种类型的比较?