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


Easiest way to determine if a key/value is identical in two arrays

我有一个像这样的数组:

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

确定[class]值在所有内部数组中是否相同的最简单方法是什么?我是不是要循环遍历所有的,然后逐个比较?还是有更好的办法?

基于注释编辑

仅基于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
}
$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
}