3

私はphpについて読んでいます、そしてそれは言います、

==$a == $bis trueif$a$b同じ要素を持つような等式です。

===isであり、同じ要素、同じ型、同じ順序で$a === $bあるtrue場合のアイデンティティです。$a$b

それで、私は自分で違いを試してみようと思い、この小さなスクリプトで書きました:

$a = array(1, 2, 3);
$b = array(2, 3, 1);
if ($a==$b) {echo "yeehaw!";} else {echo "nope";}
if ($a===$b) {echo "yup";} else {echo "nope";}

私の考えでは、2 つの配列が等しいために同じ順序は必要ありませんでした。しかし、これを実行すると、「いや」と「いや」が出ました。

違いはなんですか?

4

6 に答える 6

5

ドキュメント[PHP.net]には次のように書かれています。

== TRUE if $a and $b have the same key/value pairs.
=== TRUE if $a and $b have the same key/value pairs in the same order and of the same types.

2 つの配列は同じ順序1ではないため、キーと値のペアが同じではありません。

var_dump($a);
array(3) { 
    [0]=> int(1) 
    [1]=> int(2) 
    [2]=> int(3) 
}
var_dump($b);
array(3) { 
    [0]=> int(2) 
    [1]=> int(3) 
    [2]=> int(1) 
}

1array() 0 から始まる引数にインデックスを付ける を介したそれらの構築に関して。

于 2013-07-14T09:11:34.040 に答える
5

あなたが提供した配列には同じ値のセットがありますが、キーと値のペアが異なります。

代わりに、次の使用例を試してください (同じキーと値のペアを異なる順序で)。

$a = array(0=>1, 1=>2, 2=>3);
$b = array(1=>2, 2=>3, 0=>1);

... および次の使用例 (異なるデータ型):

$a = array(1, 2, 3);
$b = array('1', '2', '3');
于 2013-07-14T09:11:40.713 に答える
0

次の場合、 2 つのアレイは同一と見なされます===

  • 要素数は同じ
  • すべてのデータ型が同じ
  • すべての要素が同じ順序である
  • 各配列には同じキーと値のペアがあります
于 2013-07-14T09:13:47.760 に答える
0

違いはなんですか?

2 つの配列の違いは異なることを意味する可能性があるため、この質問は通常、期待に一致する配列の種類の違い関数を使用することによって最もよく答えられます。

あなたの場合、等式は(おそらく)array_diff()関数によって満たされます:

!array_diff($a, $b) && !array_diff($b, $a);

いいえ、それは私が探しているものではないという場合は、重複した質問「PHP - 2 つの配列が等しいかどうかを確認する」を参照してください。他の可能な違いとそれらをテストする方法を示す拡張回答も残しました。 ' 要素 (キーと値のペア) ではなく、値の比較に関心があります。

于 2013-07-14T10:00:34.163 に答える
-1

要素が異なるため、最初のものは失敗します。2つ目は型は同じなのに要素が違うので失敗。(どちらも同じはずです)

于 2013-07-14T09:13:26.603 に答える