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


PHP: Looking for key in array and returning boolean result

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