Получить элемент массива, где известен другой элемент?

Array
(
    [0] => Array
        (
            [what] => b4
            [map] => 74,76,77,83
        )

    [1] => Array
        (
            [what] => b2
            [map] => 53,82
        )

    [2] => Array
        (
            [what] => b1
            [map] => 36
        )
 )

abc('b4');

function abc($what){
    $map = // element `map` where `what` = $what;
}

Итак, мне нужно получить map, где what равен $what;

Например, если $what - это b4, результат должен быть 74,76,77,83; и так далее.

Как я могу это сделать?

что ты уже испробовал?

dev-null-dweller 17.12.2018 21:53

У вас не должно быть цитат в function abc('$what')

Nigel Ren 17.12.2018 21:55

@NigelRen, спасибо, правильно.

qadenza 17.12.2018 21:56

Короче говоря, @ dev-null-dweller - я получаю этот массив из базы данных и стараюсь избегать частых запросов к базе данных.

qadenza 17.12.2018 21:57

Почему бы не использовать цикл и не передать массив в качестве параметра?

The fourth bird 17.12.2018 21:58

Результат базы данных цикла @Thefourthbird или элементы массива? Не могли бы вы привести пример, пожалуйста?

qadenza 17.12.2018 22:00

Зациклить массив как 3v4l.org/MZF3Y

The fourth bird 17.12.2018 22:01
echo $array[array_search("b4", array_column($array, 'what'))]['map']; -> 3v4l.org/0NpcX
Jeff 17.12.2018 22:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
48
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Все, что вам нужно сделать, это просмотреть карту и сравнить значения.

function abc($what){
    $map = [...];
    foreach($map as $item) {
        if (isset($item[$what]) ) {
            return $item["map"];
        }
    }
    return false;
}
Ответ принят как подходящий

С помощью array_search () и array_column () вы можете получить соответствующий $map в одной строке:

<?php

$array = Array
(
    Array
        (
            "what" => "b4",
            "map" => "74,76,77,83"
        ),
   Array
        (
            "what" => "b2",
            "map" => "53,82"
        ),
    Array
        (
            "what" => "b1",
            "map" => "36"
        )
 );

function abc($array, $what) {
   return $array[array_search($what, array_column($array, 'what'))]['map'];
}   

echo abc($array, "b4");

Функция деконструирована и объяснена:

function abc($array /* the complete input array */, $what /* the search string */) {
   // get the key of the sub-array that has $what in column 'what':
   $key = array_search($what, array_column($array, 'what'));
   // use that key to get 'map' on index $key
   return $array[$key]['map'];
}

Рабочую скрипку можно найти здесь: https://3v4l.org/0NpcX

Если вам просто нужно 1 значение из массива, вы можете использовать оператор foreach и return, где есть совпадение:

$a = [
    [
        "what" => "b4",
        "map" => "74,76,77,83"
    ],
    [
        "what" => "b2",
        "map" => "53,82"
    ],
    [
        "what" => "b1",
        "map" => "36"
    ]
];
function abc($what, $arrays)
{
    foreach ($arrays as $array) {
        if ($array['what'] === $what) {
            return $array['map'];
        }
    }
    return false;
}

echo(abc('b4', $a)); // 74,76,77,83

Демо

https://ideone.com/V9WNNx

$arr[] = [
            'what' => 'b4',
            'map' => '74,76,77,83'
        ];
$arr[] = [
            'what' => 'b2',
            'map' => '53,82'
        ];
$arr[] = [
            'what' => 'b1',
            'map' => '36'
        ];

echo abc('b4', $arr);

function abc($what, $arr){
    $map = null;
    $idx = array_search($what, array_column($arr, 'what'));
    if ($idx !== false) {
        $map = $arr[$idx]['map'];
    }
    return $map;
}

Я думаю, что «ходить» по массиву легко и понятно:

<?php
$map = [
    [
        'what' => "b4",
        'map' => "74,76,77,83"
    ],
    [
            'what' => "b2",
            'map' => "53,82"
    ],
    [
            'what' => "b1",
            'map' => "36"
    ]
];

function lookupWhatInMap(&$map, $what) {
    array_walk($map, function($entry, $key) use ($what) {
        if ($entry['what'] == $what) {
            print_r($entry['map']);
        }
    });
}

lookupWhatInMap($map, "b4");

На мой взгляд, это единственный ответ, в котором можно найти более одного предмета. Все остальные верните или перезапишите, если я правильно понимаю.

Andreas 17.12.2018 22:53

@Andreas Может быть, но это не явное требование, упомянутое в вопросе .. И все другие ответы можно легко изменить для сбора совпадений в массиве результатов ...

arkascha 17.12.2018 23:16

Я знаю. Просто хотел сказать об этом всем, кто будет искать ответы в будущем.

Andreas 18.12.2018 05:18

Если вы собираетесь получать доступ к данным на регулярной основе и what уникален, используйте array_column() с третьим параметром в качестве столбца для использования в качестве ключа. Тогда ваш массив легко доступен с what, и в этом ответе не пострадают никакие петли ...

$array = Array
(
    Array
    (
        "what" => "b4",
        "map" => "74,76,77,83"
        ),
    Array
    (
        "what" => "b2",
        "map" => "53,82"
        ),
    Array
    (
        "what" => "b1",
        "map" => "36"
        )
    );

$array = array_column($array, null, "what");

echo $array['b4']['map'];

дает ...

74,76,77,83

Проголосовать за "и в этом ответе не пострадают никакие петли" - В любом случае, умное решение!

Jeff 17.12.2018 22:24

Нулевое значение означает возврат того же массива, ассоциативно связанного с «что». Просто запустите код и массив var_dump $, и вы увидите.

Andreas 17.12.2018 22:44

Использование null во втором параметре означает сохранение всего элемента как есть. Попробуйте print_r ($ array), чтобы увидеть результаты

Nigel Ren 17.12.2018 22:45

@ Джефф Я уверен, что под капотом есть петля.

Andreas 17.12.2018 22:45

Php - это цикл, как вы думаете, он выполняет любой код

Nigel Ren 17.12.2018 22:50

Другие вопросы по теме