2013-07-14 40 views
3

我閱讀關於PHP和它說,==和=== WRT數組之間的區別?

==是平等這樣$a == $btrue如果$a$b有相同的元素。

===是身份使得$a === $btrue如果$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";} 

是不是需要我的想法相同的順序兩個數組相等。但是,當我運行這個時,我得到了「nope」和「nope」。

有什麼區別?

+0

[php == vs === operator]可能重複(http://stackoverflow.com/questions/589549/php-vs-operator) – hjpotter92

+1

@ hjpotter92不重複,他在談論陣列 – 2013-07-14 09:11:38

+0

@ hjpotter92我讀過對潛在的重複的答案,它似乎是關於標量運算符,我問陣列運算符,以及數組中的等式和身份WRT排序。 –

回答

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'); 
+0

+1用於提及這兩個數組的* actual *內容。 –

+0

@AlexShesterov冉我的測試,它得到了我正在尋找的結果。感謝您提供不同數據類型的示例! –

5

documentation[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. 

因爲你的兩個數組不是以相同的順序,他們不具有相同的鍵值對。

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) 
} 

具備通過array()關於他們的建設,這將指數的參數從0開始

-1

因爲元素不同,所以第一個失敗。第二個失敗,因爲元素是不同的,雖然類型是相同的。 (兩者相同應該)

0

兩個陣列被認爲是相同===如果:

  • 數量的元件是相同的
  • 所有數據類型相同
  • 所有元件都以相同的順序
  • 每個陣列具有相同的鍵值對
4

我的想法是,兩個數組相同的順序不是必需的。

要清楚什麼用相同的鍵/值對意味着documentation,讓我們來看看實際的數組內容:

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

顯然,對是不同的。

那麼那個「相同的順序」呢?

爲了說明,讓我們創建$b稍有不同:

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

==平等會滿意,因爲對現在都是一樣的。但是,由於PHP中的數組是有序的映射,因此pair對中的差異會導致===相等性失敗。

0

有什麼區別?

兩個數組之間的區別可能意味着不同的事情,所以這個問題通常可以通過使用適合您期望的數組的差異函數來回答。

在你的情況,平等(可能)由array_diff()功能滿足:

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

如果你說沒有,那不是我要找的,請參閱重複的問題"PHP - Check if two arrays are equal"我也離開了an extended answer there它顯示了其他可能的差異,以及如何測試那些關注比較值而不是元素(它們是鍵/值對)的人。