Как создать массив из значений другого ключа массива?

У меня есть массив следующим образом:

$arr1 = array(
  0 => array(
    'name' => 'tom',
    'age' => 22
  ),
  1 => array(
    'name' => 'nick',
    'age' => 18
  )
);

Однако я хочу создать из него массив, который состоит из всех имен, поэтому он станет следующим:

$arr2 = array('tom', 'nick');

Я просмотрел array_filter(), но это не сработало бы, поскольку это многомерный массив!

Вопрос

Как создать массив со значениями определенного ключа (name) из другого многомерного массива?

Ответ 1

Более новые версии PHP позволяют использовать array_map() с выражением функции вместо имени функции:

$arr2 = array_map(function($person) {
    return $person['name'];
}, $arr1);

Но если вы используете PHP < 5.3, гораздо проще использовать простой цикл, так как array_map() потребовалось бы определить (возможно, глобальную) функцию для этой простой операции.

$arr2 = array();

foreach ($arr1 as $person) {
    $arr2[] = $person['name'];
}

// $arr2 now contains all names

Ответ 2

Это можно сделать еще более простым способом, используя array_column

$arr2= array_column($arr1, 'name');

print_r($arr2); //Array ( [0] => tom [1] => nick )

array_column используется для получения столбцов подмассива.

Ответ 3

$array = array(0 => array('name' => 'tom', 'age' => 22), 1 => array('name' => 'nick', 'age' => 18));
foreach($array as $arr => $a){
    $names[] = $array[$arr]["name"];
}

print_r($names); //Array ( [0] => tom [1] => nick ) 

Ответ 4

если вы используете Laravel, то просто используйте array_pluck:

$arr2 = array_pluck($arr1 , 'name');