PHP array_filter в многомерном ассоциативном массиве - PullRequest
1 голос
/ 18 марта 2019

Мне нужно найти значение для ключа путем поиска другого значения в том же массиве многомерного массива.

Это заданный массив:

<?php 

$users = array(

    "userA" => array(
                "email" => "userA@email.com",
                "language" => "en",
            ),

    "userB" => array(
                "email" => "userB@email.com",
                "language" => "de",
            ),

    "userC" => array(
                "email" => "userC@email.com",
                "language" => "it",
            ),

);

?>

Пример: Iхочу ввести ...

$lang = 'de';

... и получить значение для "электронной почты" этого же элемента.Таким образом, в этом случае он должен вывести:

userB@email.com

Языки уникальны, так что будет только одно возможное совпадение.

Если это уже можно было спросить, я прошу прощения, но я не могНичего не найдено с этой структурой и условиями поиска.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 18 марта 2019

Вы можете использовать array_column () для этого -

// Generate array with language as key
$new = array_column($users, 'email', 'language');
// access array value (email) by language
echo $new['de'];

выход

userB@email.com
0 голосов
/ 18 марта 2019

Существует один рекурсивный способ добиться этого,

function recursive_array_search($needle,$haystack) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
            return $current_key;
        }
    }
    return false;
}
// searching 'de' and getting all array or specific value by key. Its multipurpose method.
$temp = $users[recursive_array_search('de', $users)]['email']; 
print_r($temp);

Ссылка Ссылка .

( Демо )

0 голосов
/ 18 марта 2019

Этого может быть трудно достичь с array_filter, но вы могли бы взглянуть на другие альтернативы, такие как foreach цикл и array_push

$filtered = [];

foreach($users as $key => $value) {
    if($value['language'] == 'de') {
        array_push($filtered, [$key => $value]);
    }
}

См. array_filter с ассоциированным массивом?

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