确定两个数组中键/值是否相同的最简单方法

时间:2013-06-05 15:52:38

标签: php arrays

我有一个如下所示的数组:

[items] => Array
(
    [0] => Array
        (
            [qty] => 1
            [class] => P
        )

    [1] => Array
        (
            [qty] => 1
            [class] => P
        )

    [2] => Array
        (
            [qty] => 1
            [class] => S
        )

)

确定所有内部数组中[class]值是否相同的最简单方法是什么?我是否需要遍历所有这些并逐一比较?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

根据评论进行修改

仅基于class比较

检查相等性的解决方案
$n = count($array['items']);
$elem = $array['items'][0]['class'];

for ($i=1 ; $i<$n ; $i++) 
   if ($elem !== $array['items'][$i]['class']) 
       break;

if ($i >= $n) {
    // equal
}

功能

  • 最多N-1($ n-1)比较
  • 使用!==而非!=检查完美匹配(类型和值)
  • elem设置为第一个元素[0],以便PHP不必一直提取

<小时/> 测试内部数组是否相等的解决方案

使用array_diff返回数组之间的差异。

例如,比较[items]中的N个数组(最多进行N-1次比较)

$n = count($array['items']);
for($i=1 ; $i<$n ; $i++) 
   if (count(array_diff($array['items'][0], $array['items'][$i])))
      break;

if ($i >= $n) {
     // they are equal
}

array_diff()返回被比较的数组中的元素。计算返回的元素(count())可以检测差异。

请注意array_diff()可以使用两个以上的数组来检查是否相等。如果你有一个固定数量的数组,你可以简单地做

// Compare 3 arrays
if (count(array_diff($array['items'][0], $array['items'][1], $array['items'][2]))) {
    // Arrays differ
}

答案 1 :(得分:0)

$n = count($array['items']);
$flag=0;
for($i=0 ; $i<$n ; $i++)
{
  if($i!=0)
  {
       if($array['items'][$i][class]!=$array['items'][$i-1][class])
       {
              $flag=1;
        }
  }

}

if($flag==1)
{
  // they are equal
}