0

我有一个看起来像这样的数组:

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

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

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

)

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

4

2 回答 2

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返回数组之间的差异。

例如,比较 N 个数组[items](最多进行 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
}
于 2013-06-05T15:55:17.707 回答
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
}
于 2013-06-05T16:20:06.540 回答