Поиск значений во вложенном массиве

У меня есть массив следующим образом

array(2) {
  ["operator"] => array(2) {
    ["qty"] => int(2)
    ["id"] => int(251)
  }
  ["accessory209"] => array(2) {
    ["qty"] => int(1)
    ["id"] => int(209)
  }
  ["accessory211"] => array(2) {
    ["qty"] => int(1)
    ["id"] => int(211)
  }
}

Я пытаюсь найти способ проверить, что значение идентификатора существует в массиве и возврате bool. Я пытаюсь выяснить быстрый путь, который не требует создания цикла. Используя in_array не работала функция, и я также считал, что это довольно медленно.

В php руководстве кто-то рекомендовал использовать flip_array () и затем isset (), но я не могу заставить это работать на 2-й массив.

выполнение чего-то как

if($array['accessory']['id'] == 211)

также работал бы на меня, но я должен соответствовать всем ключам, содержащим аксессуар - не уверенный, как сделать это

Так или иначе я вращаюсь в кругах и мог использовать некоторую справку. Это кажется, что должно быть легко.Спасибо.

5
задан dardub 22 April 2010 в 18:20
поделиться

3 ответа

Эй, дардуб, вы можете использовать array_walk, чтобы проверить, находится ли конкретное значение в вашем массиве - array_walk выполняет итерацию al элементов вашего массива и применяет к ним предоставленную функцию, поэтому в основном вам нужно будет создать эту функцию. Он используется следующим образом:

$arr = array(
    'one' => array('id' => 1),
    'two' => array('id' => 2),
    'three' => array('id' => 3)
);

function checkValue($value, $key)
{
    echo $value['id'];
}

array_walk($arr, 'checkValue');

Вам просто нужно добавить к вашей функции все необходимые условия / проверки.

Надеюсь, это поможет.

М.

РЕДАКТИРОВАТЬ: Документы PHP на array_walk http://www.php.net/manual/en/function.array-walk.php

6
ответ дан 14 December 2019 в 08:45
поделиться
$map = array();
foreach ($arr as $v) {
    $map[$v['id']] = 1;
}
//then you can just do this as when needed
$exists = isset($map[211]);

Или, если вам нужны связанные с ним данные

$map = array();
foreach ($arr as $k => $v) {
    $map[$v['id']][$k] = $v;
}
print_r($map[211]);
0
ответ дан 14 December 2019 в 08:45
поделиться

Эта функция полезна in_array (211, $ array ['accessory']); Она проверяет весь указанный массив, чтобы увидеть, существует ли в нем ваше значение, и возвращает истину.

in_array

1
ответ дан 14 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: