Предположим, у меня есть следующий многомерный массив (полученный из MySQL или службы):
array( array( [id] => xxx, [name] => blah ), array( [id] => yyy, [name] => blahblah ), array( [id] => zzz, [name] => blahblahblah ), )
Можем ли мы получить массив id
s в одном « встроенном » вызове функции php? или одну строку кода?
Я знаю о традиционном цикле и получаю значение, но мне это не нужно:
foreach($users as $user) { $ids[] = $user['id']; } print_r($ids);
Возможно, некоторые array_map()
и call_user_func_array()
могут делать магию.
Начиная с php 5.5, вы можете использовать array_column
:
$ids = array_column($users, 'id');
Начиная с php 5.3, вы можете использовать array_map
с анонимной функцией, например:
$ids = array_map(function ($ar) {return $ar['id'];}, $users);
Прежде чем (Technically php 4.0.6+) , вы должны создать анонимную функцию с помощью create_function
:
$ids = array_map(create_function('$ar', 'return $ar["id"];'), $users);
Начиная с PHP5.5 + у вас есть array_column (), доступный для вас, что делает все из них устаревшими.
$ids = array_map(function ($ar) {return $ar['id'];}, $users);
Решение @phihag будет работать безупречно в PHP, начиная с PHP 5.3.0, если вам нужна поддержка до этого, вам нужно будет скопировать этот файл wp_list_pluck.
WordPress 3.1+
В WordPress есть функция wp_list_pluck. Если вы используете WordPress, который решает вашу проблему.
PHP <5.3
Если вы не используете WordPress , так как код является открытым исходным кодом, вы можете скопировать код в свой проект (и переименовать функцию в нечто, что вам больше нравится, например array_pick). Просмотр источника здесь
Если id
является первым ключом в массиве, это будет делать:
$ids = array_map('current', $users);
Однако вы не должны полагаться на это. 🙂