Предположим, у меня есть следующий многомерный массив (полученный из 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()
смогут творить чудеса
foreach($users as $user) {$ids[] = $user['id'];}
в одну строку! но вы понимаете, что я имею в виду / нужно :-)Ответы:
Начиная с php 5.5 вы можете использовать
array_column
:Это предпочтительный вариант в любом современном проекте. Однако, если вы должны поддерживать php> 5.5, существуют следующие альтернативы:
Начиная с php 5.3, вы можете использовать
array_map
анонимную функцию, например:Раньше (технически php 4.0.6+) вы должны
create_function
вместо этого создать анонимную функцию :источник
function ($ar) {return $ar['id'];}
возвращаемое значение ключа, это было бы здорово! :-)['ball' => ['golf' => 7, 'basket' => 5, 'soccer' => 6], 'shuttle' => ['badminton' => 1]]
.array_map
функцию стрелки:$ids = array_map(fn ($ar) => $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 <5.3
Wordpress 3.1+В Wordpress есть функция wp_list_pluck. Если вы используете Wordpress, она решает вашу проблему.
PHP <5.3Если вы не используете Wordpress , поскольку код является открытым, вы можете скопировать и вставить код в свой проект (и переименовать функцию в то, что вам больше нравится, например array_pick). Посмотреть исходный код здесь
источник
Если
id
это первый ключ в массиве, это сделает:Однако вам не обязательно полагаться на это. :)
источник
Вы также можете использовать,
array_reduce()
если предпочитаете более функциональный подходНапример:
Или, если тебе нравится фантазия,
Однако этот и все вышеперечисленные методы работают за кулисами;)
источник