PHP:在数组中查找键并返回布尔结果

时间:2011-06-28 15:22:39

标签: php arrays php-5.3

在我的下面的代码中,我希望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)
?>

谁能告诉我哪里出错了?提前谢谢。

2 个答案:

答案 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.

编辑:如果您想执行上述任务,请使用array_filter

$arr = array_filter($array, function($a) { return (array_search(2, $a) == 'NUMBER'); } );
print_r($arr);

输出

Array
(
    [1] => Array
        (
            [NUMBER] => 2
            [LETTER] => B
        )

)