поиск в массиве php по ключам - PullRequest
0 голосов
/ 24 апреля 2018

Предположим, массив выглядит следующим образом:

Array
(
    [a] => Array
        (
            [id] => 3
            [x] => binginb
        )

    [b] => Array
        (
            [id] => 5
            [x] => dibdab
        )

)

Теперь я хотел бы получить доступ к этому массиву на основе его содержимого, поэтому id и x в данном случае.

Здесь было бы неплохо иметь возможность сделать что-то вроде

 $i = array_search(5,array_column($a,'id'));
 $stuff = dostuff($a[$i]['x']);

, но это не работает, поскольку $a[1] - неопределенное смещение.

Возможно ли сделать что-то подобноебез изменения исходного массива?

Ответы [ 4 ]

0 голосов
/ 24 апреля 2018

Используйте array_column, чтобы переиндексировать массив с помощью id:

$new = array_column($a, 'x', 'id');

Затем для поиска 5, просто:

echo $new[5];

Если у вас естьбольше, чем просто x:

$new = array_column($a, null, 'id');

Тогда:

echo $new[5]['x'];

Если вы сделаете это только один раз:

echo array_column($a, 'x', 'id')[5];

Или:

echo array_column($a, null, 'id')[5]['x'];
0 голосов
/ 24 апреля 2018

Если вы не хотите ограничиваться встроенными функциями PHP, попробуйте это:

<?php
function dostuff( $var1 )
{
    print_r($var1);
}

$a = [
   'a' => ['id' => 3, 'x' => 'binginb'],
   'b' => ['id' => 5, 'x' => 'dibdab'],
];

array_map( // 2: pass each element from the result from array_filter to dostuff()
    'dostuff',
    array_filter( // 1: filter $a based on the criteria defined in the anonymous function
        $a,
        function($item){
            return $item['id'] === 5;
        }
    )
);

Вывод:

Array
(
    [id] => 5
    [x] => dibdab
)
0 голосов
/ 24 апреля 2018

Я думаю, это поможет вам,

<?php
$array = array(
    'a' => array(
        'id' => 3,
        'x' => 'binginb',
    ),
    'b' => array(
        'id' => 5,
        'x' => 'dibdab',
    )
);

$i = array_column($array,'x','id');

// Вывод $i

Array ( [3] => binginb [5] => дибдаб)

$stuff = dostuff($i[5]); // $i[5] return dibdab
0 голосов
/ 24 апреля 2018

array_search() возвращает индекс результата array_column(). Вы можете использовать array_keys(), чтобы найти ключ для этого индекса:

$a = [
   'a' => ['id' => 3, 'x' => 'binginb'],
   'b' => ['id' => 5, 'x' => 'dibdab'],
   ];
$i = array_search(5, array_column($a,'id'));
$key = array_keys($a)[$i]; // get the key at the $i index.
$stuff = dostuff($a[$key]['x']); // Here, $a[$key]['x'] = 'dibdab'

Обратите внимание, что array_search() может вернуть FALSE, если значение не найдено. Вы можете проверить результат (используя строгое сравнение), прежде чем использовать его.

$i = array_search(5, array_column($a,'id'));
if ($i !== false) {
    $key = array_keys($a)[$i]; // get the key at the $i index.
    $stuff = dostuff($a[$key]['x']); // Here, $a[$key]['x'] = 'dibdab'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...