Как получить массив определенного "ключа" в многомерном массиве без цикла
Предположим, что у меня есть следующий многомерный массив (извлеченный из 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()
могут делать магию.
Ответы
Ответ 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);
Однако вы не должны полагаться на это.:)