2011-11-27 140 views
5

我正在尋找一種方法來檢查,如果兩個數組是相同的,例如PHP檢查數組是否相同?

$a = array(
    '1' => 12, 
    '3' => 14, 
    '6' => 11 
); 
$b = array(
    '1' => 12, 
    '3' => 14, 
    '6' => 11 
); 

這兩個是相同的,但如果一個值發生改變,則返回false,我知道我可以寫一個函數,但有一個已經建立?

+1

但是,如果一個單值被改變那麼他們將不相同。這裏有什麼問題? –

+0

你甚至嘗試過使用'==='嗎? – animuson

回答

12

您可以使用使用的

$a === $b // or $a == $b 

例如:

<?php 
$a = array(
    '1' => 12, 
    '3' => 14, 
    '6' => 11 
); 
$b = array(
    '1' => 12, 
    '3' => 14, 
    '6' => 11 
); 
echo ($a === $b) ? 'they\'re same' : 'they\'re different'; 

echo "\n"; 
$b['1'] = 11; 

echo ($a === $b) ? 'they\'re same' : 'they\'re different'; 

將返回

they're same 
they're different 

demo

+0

這個答案誤導人們從搜索進來。 'array_diff'不適用於檢查「相同的數組」。它也有一個前提,即密鑰不會改變。使用array_diff添加另一個鍵以及其中一個現有值將不起作用,同時向第一個數組添加值或第二個數組給出不同的結果。 –

+0

@DustinGraham:你能給我演示一下你的意思嗎?我對此有點困惑 –

+0

如果一個人到達這裏尋找一種方法來判斷兩個數組是否相同,那麼答案(你的)有第一個可能誤導的'array_diff()'建議,試試這個:'' $ a = array('x'=> true,'y'=> false); $ b = array('x'=> true,'y'=> true,'z'=> false); print_r(array_diff($ a,$ b));'顯然它們不相同,但'array_diff'沒有顯示任何區別。 –

21

你可以只使用$a == $b如果訂單無關緊要,或者$a === $b如果訂單確實重要。

例如:

$a = array(
    '1' => 12, 
    '3' => 14, 
    '6' => 11 
); 
$b = array(
    '1' => 12, 
    '3' => 14, 
    '6' => 11 
); 
$c = array(
    '3' => 14, 
    '1' => 12, 
    '6' => 11 
); 
$d = array(
    '1' => 11, 
    '3' => 14, 
    '6' => 11 
); 

$a == $b; // evaluates to true 
$a === $b; // evaluates to true 
$a == $c; // evaluates to true 
$a === $c; // evaluates to false 
$a == $d; // evaluates to false 
$a === $d; // evaluates to false