在我的下面的代码中,我希望PHP查找值为2的“NUMBER”并在布尔值中说明它是否存在,但是它不起作用:
<?
$array[] = array('NUMBER' => 1, 'LETTER' => 'A');
$array[] = array('NUMBER' => 2, 'LETTER' => 'B');
$array[] = array('NUMBER' => 3, 'LETTER' => 'C');
echo (in_array(array('NUMBER' => 2), $array)) ? '1' : '0'; // (expected: 1; actual: 0)
?>
谁能告诉我哪里出错了?提前谢谢。
答案 0 :(得分:5)
in_array()`将给定值与数组值进行比较。在您的情况下,数组的每个条目都有两个值,但给定的数组只包含一个,因此您无法以这种方式进行比较。
我没有办法解决$found = false;
foreach ($array as $item) {
if ($item['NUMBER'] == 2) {
$found = true;
break;
}
}
echo $found ? '1' : '0';
也许(特别是使用php5.3)你可以用array_map()
或array_reduce()
构建一些东西。例如
$number = 2;
echo array_reduce($array, function ($found, $currentItem) use ($number) {
return $found || ($currentItem['NUMBER'] == $number);
}, false) ? '1' : '0';
或
$number = 2;
echo in_array($number, array_map(function ($item) {
return $item['NUMBER'];
}, $array) ? '1' : '0';
答案 1 :(得分:0)
问题是您正在搜索$array
的索引1的部分元素。
但如果你搜索:
echo (in_array(array('NUMBER' => 2, 'LETTER' => 'B'), $array))
然后它将返回1.
$arr = array_filter($array, function($a) { return (array_search(2, $a) == 'NUMBER'); } );
print_r($arr);
Array
(
[1] => Array
(
[NUMBER] => 2
[LETTER] => B
)
)