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

标签 php arrays associative-array

假设,我们有 2 个关联数组:

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

$array2 = array(
    2 => 1,
    1 => 2,
);

它们包含相同的元素,但顺序不同。我想写一个比较函数,只有在以下情况下才会给出 true:

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

这工作正常,但它不会工作,因为 != operator in this if:

if ($array1[$keys1[$i]] != $array2[$keys2[$i]])
{
       return false;
}

这可以通过使用递归函数、按数据类型切换来解决。但这个简化版本对我来说没问题。

是否有针对此类比较的标准解决方案?

最佳答案

array operators 所述,您需要的是 === 相等运算符。

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

关于php - 比较两个关联数组的键顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17924178/

相关文章:

javascript - 使用循环返回子集

java - 如何生成具有一些非常具体约束的数组

php - WordPress 作者链接

php - 从字符串中删除端口号

c - 在什么情况下数组不会转换为指针?

javascript - 使用关联数组作为 D3 的数据

php - 为什么不允许对象作为关联数组中的键?

actionscript-3 - ActionScript - 比较和删除复杂数组的重复项?

php - 'fi' 在数据库中显示不正确

php - 使用日历api使用google-api-php-client进行谷歌服务帐户身份验证