Как получить массив конкретного "ключа" в многомерном массиве без зацикливания


предположим, что у меня есть следующий многомерный массив (полученный из MySQL или службы):

array(
    array(
        [id] => xxx,
        [name] => blah
    ),
    array(
        [id] => yyy,
        [name] => blahblah
    ),
    array(
        [id] => zzz,
        [name] => blahblahblah
    ),
)

можем ли мы получить массив ids в "встроенный " вызов функции php? или одна строка кода?
Я знаю о традиционном цикле и получении значения, но мне это не нужно:

foreach($users as $user) {
    $ids[] = $user['id'];
}
print_r($ids);

может быть, некоторые array_map() и call_user_func_array() может сделать волшебство.

3 78
php

3 ответа:

начиная с php 5.5, вы можете использовать array_column:

$ids = array_column($users, 'id');

начиная с PHP 5.3, вы можете использовать array_map С анонимной функцией, как это:

$ids = array_map(function ($ar) {return $ar['id'];}, $users);

до(технически php 4.0.6+), вы должны создать анонимную функцию с create_function:

$ids = array_map(create_function('$ar', 'return $ar["id"];'), $users);

PHP 5.5+

начиная PHP5. 5+ у вас есть array_column () доступно для вас, что делает все ниже устаревшим.

PHP 5.3+

$ids = array_map(function ($ar) {return $ar['id'];}, $users);

решение от @phihag будет работать безупречно в PHP, начиная с PHP 5.3.0, если вы нужна поддержка перед этим, вам нужно будет скопировать, что wp_list_pluck.

PHP Wordpress 3.1+

в Wordpress есть функция под названием wp_list_pluck Если вы используете WordPress, который решает вашу проблему.

PHP если вы не используете Wordpress, так как код является открытым исходным кодом, вы можете скопировать вставить код в свой проект (и переименовать функцию в то, что вы предпочитаете, например array_pick). посмотреть здесь Источник

Если id это первый ключ в массиве, это будет делать:

$ids = array_map('current', $users);

вы не должны обязательно полагаться на это, хотя. :)