假设我们有2个关联数组:
<?php
$array1 = array(
1 => 2,
2 => 1,
);
$array2 = array(
2 => 1,
1 => 2,
);
它们包含相同的元素,但顺序不同。我想写一个比较函数,只有在以下情况下才会给出:
所以,我尝试了以下内容:
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;
}
这可以使用递归函数修复,按数据类型切换。但这个简化版对我来说还不错。
此类比较是否有任何标准解决方案?
答案 0 :(得分:6)
如array operators中所述,您需要的是===
相等运算符。
if ($array1 === $array2) {
echo "same key pairs and same element order\n";
}
答案 1 :(得分:0)
$array1 = array(
1 => 2,
2 => 1);
$array2 = array(
2 => 1,
1 => 2);
var_dump(compareArray($array1,$array2));
function compareArray ($array1, $array2)
{
foreach ($array1 as $key => $value)
{
if ($array2[$key] != $value)
{
return false;
}
}
return true;
}