0

次のような配列があります。

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

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

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

)

[class] 値がすべての内部配列で同じかどうかを判断する最も簡単な方法は何ですか? それらすべてをループして、1 つずつ比較する必要がありますか? それとももっと良い方法がありますか?

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) 比較
  • !==完全一致をチェックするand notを使用!=する (型と値)
  • PHP が常に取得する必要がないようelemに、最初の要素に設定します。[0]


内部配列が等しいかどうかをテストするソリューション

配列間の差を返す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()等しいかどうかをチェックするために 2 つ以上の配列が必要になる場合があることに注意してください。固定数の配列がある場合は、単純に行うことができます

// Compare 3 arrays
if (count(array_diff($array['items'][0], $array['items'][1], $array['items'][2]))) {
    // Arrays differ
}
于 2013-06-05T15:55:17.707 に答える