2011-06-01 171 views
2

此代碼應返回TRUE值:in_array功能無法正常工作

<?php 
     $return = in_array(array(1, 2), array(1, 2)); 
?> 

in_array返回FALSE。

+1

但是沒有一個數組包含數組1和2在另一箇中? – 2011-06-01 15:53:14

+0

考慮到你是相當新的看看答案,並選擇,只要你認爲是最好的。 – dynamic 2011-06-01 16:09:04

+0

我有兩個數組,第一個(1,2,3,4,5)和第二個(1,4),我想檢查第二個數組中的元素是否在第一個。如何以簡單的方式做到這一點? – Damien 2011-06-01 16:17:41

回答

1

在你的情況下,in_array的第一個參數不應該是一個數組,而應該是一個整數。你用這段代碼做的是檢查數組內存在的數組是否存在,這不在那裏。一個正確的形式是:

in_array(1, array(1, 2)); // true 
+0

這是不正確的。您可以使用in_array檢查嵌套數組。我在我的回答中解釋了它 – dynamic 2011-06-01 15:53:21

+0

這裏介紹的情況是正確的,用戶在數組內搜索整數。 – faken 2011-06-01 15:58:24

13

in_array檢查數組是否存在。

$needle好好嘗試一下存在於所有都作爲$haystack

的值,這將是確定的,如果你$haystack在這種情況下,實際上array(1,2)

array(1,2,3,array(1,2)) 

通知發現裏面果然

如果你想檢查2陣列是否相等,我建議你===運營商

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

根據你的榜樣,你可能想看看array_intersect()你的第二個參數尋找值(列)。它以可能更好地符合您的規格的方式比較陣列。

4

按照PHP手冊in_array,該函數的語法是:

bool in_array (mixed $needle , array $haystack [, bool $strict = FALSE ]) 

所以,你需要提供一個$needle值作爲第一個參數。這就解釋了爲什麼你的例子返回FALSE。然而,這些例子都返回TRUE:

in_array(1, array(1, 2)); 
in_array(2, array(1, 2)); 
in_array(array(1, 2), array(1, 2, array(1, 2))) 

這就是說,如果你解釋正是你正在嘗試做可能會有所幫助。也許in_array不是你需要的功能。

4

您的第一個數組不包含在第二個數組中,它是平等的。

這將返回true:

var_dump(in_array(array(1, 2), array(1, 2, array(1, 2)))); 
2

你missunderstand in_array看到offiziell文檔:http://uk.php.net/in_array

<?php 
$a = array(array('p', 'h'), array('p', 'r'), 'o'); 

if (in_array(array('p', 'h'), $a)) { 
    echo "'ph' was found\n"; 
} 

if (in_array(array('f', 'i'), $a)) { 
    echo "'fi' was found\n"; 
} 

if (in_array('o', $a)) { 
    echo "'o' was found\n"; 
} 
?> 
1

如果第二陣列看起來像這樣

array(array(1, 2)); 

然後返回true

2

陣列(1,2)不處於陣列(1,2)是陣列(1,2),

$return = in_array(array(1, 2), array(array(1, 2)));

將返回true。 (更多是yes123的答案的延伸)

3

你有興趣intersection

$arr1 = array(1, 2); 
$arr2 = array(1, 2); 

$return = array_intersect($arr1, $arr2); 

if(count($return) === count($arr1)) { 
    // all are present in arr2 
}