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

时间:2013-07-29 12:33:38

标签: php arrays associative-array

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

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

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

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

  1. 数组具有相同的键=&gt;价值对。
  2. 对的顺序是相同的。
  3. 所以,我尝试了以下内容:

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

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

    此类比较是否有任何标准解决方案?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

你能试试下面这个吗?返回true 如果key =&gt;值并且将以任何顺序 否则返回false

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