Подтвердить что ты не робот

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

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

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

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

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

Возможно, некоторые array_map() и call_user_func_array() могут делать магию.

4b9b3361

Ответ 1

С 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);

Ответ 2

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 < 5,3

Wordpress 3.1+

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

PHP < 5,3

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

Ответ 3

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

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

Однако вы не должны полагаться на это.:)