in_array函数不起作用

时间:2011-06-01 15:50:57

标签: php arrays

此代码应返回TRUE值:

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

in_array返回FALSE。

10 个答案:

答案 0 :(得分:13)

in_array检查数组中是否存在值。

您的$needle根本不存在$haystack

的值

如果您的$haystack

,那就没问题了
array(1,2,3,array(1,2))

请注意,在这种情况下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.

答案 1 :(得分:5)

根据您的示例,您可能需要查看array_intersect()。它以一种可能更符合您的规范的方式比较数组。

答案 2 :(得分:4)

根据in_array的PHP手册,函数的语法是:

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不是你需要的功能。

答案 3 :(得分:4)

你的第一个数组不包含在第二个数组中,它是相等的。

返回true:

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

答案 4 :(得分: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
}

答案 5 :(得分:2)

第一个参数是你在第二个参数(数组)中寻找的值 http://php.net/manual/fr/function.in-array.php

答案 6 :(得分:2)

你想念in_array见offiziell docs: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";
}
?>

答案 7 :(得分:2)

数组(1,2)不在数组(1,2)中,它是数组(1,2),

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

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

答案 8 :(得分:1)

在您的情况下,in_array的第一个参数不应该是数组,而应该是整数。您正在使用该代码执行的操作是检查数组中是否存在数组,而不存在该数组。一个正确的形式是:

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

答案 9 :(得分:1)

如果第二个数组看起来像这样

array(array(1, 2));

然后返回true

相关问题