比较两个有关键顺序的关联数组


Compare two associative arrays regarding the order of keys

假设我们有两个关联数组:

<?php
$array1 = array(
    1 => 2,
    2 => 1,
);
$array2 = array(
    2 => 1,
    1 => 2,
);

它们包含相同的元素,但顺序不同。我想写一个比较函数,只有当

  1. 数组具有相同的键=>值对
  2. 成对的顺序是相同的

所以,我尝试了以下方法:

1次尝试

if ($array1 == $array2)
{
    print "equal'n";
}

打印:相等的

2次尝试

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;
}

这可以通过使用递归函数、按数据类型切换来修复。但这个简化版本对我来说还可以

这种比较有标准的解决方案吗?

如数组运算符下所述,您需要的是===相等运算符。

if ($array1 === $array2) {
    echo "same key pairs and same element order'n";
}

你能试试下面的这个吗。返回true如果键=>值并且将按任何顺序否则返回错误

$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;
 }