2011-06-01 168 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 
}