在下面的代码中,我希望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)
?>
有人能告诉我哪里出了问题吗?提前谢谢。
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';
问题是您正在搜索$array
的索引1的分部元素。
但如果你搜索:
echo (in_array(array('NUMBER' => 2, 'LETTER' => 'B'), $array))
则它将返回1。
编辑:如果您想像这样执行以上任务,请使用array_filter:
$arr = array_filter($array, function($a) { return (array_search(2, $a) == 'NUMBER'); } );
print_r($arr);
输出
Array
(
[1] => Array
(
[NUMBER] => 2
[LETTER] => B
)
)