PHP: поиск ключа в массиве и возвращение логического результата - PullRequest
1 голос
/ 28 июня 2011

В моем коде ниже я хочу, чтобы PHP искал "NUMBER" со значением 2 и говорил в логическом виде, существует ли он, однако он не работает:

<?
$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 ]

5 голосов
/ 28 июня 2011

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';
0 голосов
/ 28 июня 2011

Проблема в том, что вы ищете частичный элемент индекса 1 из $array.

Но если вы ищете:

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
        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...