【问题标题】:How to check if two indexed arrays have same values even if the order is not same in PHP?即使PHP中的顺序不同,如何检查两个索引数组是否具有相同的值?
【发布时间】:2011-07-30 12:37:25
【问题描述】:

我想比较两个索引数组,以便两个数组的值相同但顺序可能不同,例如我尝试这样做但它根本不起作用。

示例 1:

$a = array(1,2,3,4,5);
$b = array(1,2,3,5,4);
echo ($a == $b) ? 'Match Found' : 'No Match Found';
//Returns No Match Found

示例 2:(尝试对数组进行排序但未排序)

$a = array(1,2,3,4,5);
$a = sort($a);
$b = array(1,2,3,5,4);
$b = sort($b);
echo ($a === $b) ? 'Match Found' : 'No Match Found';
//Returns Match Found

上面的示例返回匹配找到,这是因为如果我尝试对索引数组进行排序,sort() 返回 1,并且在排序后$a$b 都包含 1,导致条件为真,这是完全错误的,这是技巧似乎也不起作用,我尝试了许多不同的排序功能,如asort()arsort() 等,但似乎没有一个起作用。

解决方法是什么?

谢谢

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:
    $a = array(1,2,3,4,5);
    $b = array(1,3,2,5,3,4);
    
    
    if(count($a) == count($b) && count(array_diff($a, $b)) == 0){
        echo "A";
    }
    

    需要进行长度检查,否则上面的两个数组会出现相同的结果。

    编辑:更好的解决方案。

    【讨论】:

      【解决方案2】:

      与其比较sort的返回值,不如直接比较排序后的数组?

      $a = array(1,2,3,4,5);
      sort($a);
      $b = array(1,2,3,5,4);
      sort($b);
      echo ($a == $b) ? 'Match Found' : 'No Match Found';
      

      如果数组有不同的键但值相同,它们仍然会被视为相等。如果这是一个问题,您还必须比较数组键。

      【讨论】:

        猜你喜欢
        • 2019-07-20
        • 1970-01-01
        • 2022-12-12
        • 1970-01-01
        • 2014-02-03
        • 2012-06-10
        • 1970-01-01
        • 1970-01-01
        • 2017-04-25
        相关资源
        最近更新 更多