@Romua1d

Как в PHP решаем проблему поиска по ключу и извлечения значения?

$array =[];
$array[] = [
    'id' => 1,
    'name' => 'test2'
];
$array[] = [
    'id' => 2,
    'name' => 'test2'
];
$array[] = [
    'id' => 3,
    'name' => 'test2'
];

Python:

result = (x for x in xyz if x.id == a)

Js:
result = xyz.find(x => x.id == a)
PHP
???
  • Вопрос задан
  • 4757 просмотров
Решения вопроса 2
Minifets
@Minifets
Hello world!!!
$a = 3;
$result = array_filter($array, function ($elem) use ($a) {
    return array_key_exists('id', $elem) and $elem['id'] === $a;
});

if (!empty($result)) {
    $value = reset($result);
}
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
На коленке набросал. Как-то так должно работать.

$index = array_search($id, array_column($array, 'id'));
$value = $index !== false ? $array[$index] : null;
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Adelf
На PHP я это решаю так. Если я знаю, что будут интенсивные поиски по id, то заполнять массив я буду немного с умом.
$array[3] = [
    'id' => 3,
    'name' => 'test2'
];

Соответственно "поиск":
$array[$a]
Ответ написан
Комментировать
@ipokos
Получить значение:
$arr['id']['test'] // 1
$arr['id']['test2'] // 2

Если нужно проверить наличие ключа
array_key_exists('test', $arr['id']); // true
array_key_exists('test123', $arr['id']); // false
Ответ написан
Комментировать
melodyn
@melodyn
Лучше нативная смерть, чем фреймворковая жизнь.
Поскольку массивы простой и линейный, его можно передать в foreach и обращаться по ключу, как ответил ipokos. Для вложенных и нелинейных массивов могу предложить свою функцию поиска по ключу: https://repl.it/@Melodyn/findValuesByKeys-PHP

Массивы из вопроса обходятся примерно так:
foreach ($array as $item) {
    echo $item['id'];
}
Ответ написан
Комментировать
@evgen9586
Backend-dev. Лублу Enterprise и не люблю понты)
php.net/manual/ru/language.types.array.php

Пример #6 Доступ к элементам массива
<?php
$array = array(
    "foo" => "bar",
    42    => 24,
    "multi" => array(
         "dimensional" => array(
             "array" => "foo"
         )
    )
);

var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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