Array_values ​​из многомерного массива

Массив выглядит так:

$arr = array( array('a', 'b'), array('c', 'd'), array('e', 'f'), ) 

И я хочу получить массив со значениями из первого столбца, например array('a', 'c', 'e')

Я знаю, что это легко можно сделать, итерации массива и сохранение значений в другом массиве, но есть ли более короткий путь, встроенная функция PHP или что-то еще?

 $arr = array( array('a', 'b'), array('c', 'd'), array('e', 'f'), ); // You can make it look concise using array_map :) $arr = array_map(function($x){ return $x[0]; }, $arr); // $arr = array('a', 'c', 'e'); 

Начиная с PHP 5.5 вы можете использовать array_column() :

 $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe' ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith' ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones' ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe' ) ); $lastNames = array_column($records, 'last_name', 'id'); print_r($lastNames); Array ( [2135] => Doe [3245] => Smith [5342] => Jones [5623] => Doe ) 

Вы можете сделать:

 $foo = array_map('reset', $arr); 

Любой, кто читает ваш код после этого, должен знать, что побочный эффект сброса возвращает первое значение в массиве. Это может быть или не быть более читаемым – и у него есть недостаток в том, что он не работает, если массив не имеет записи, проиндексированной нулем:

 $baz = array_map(function ($a) { return $a[0]; }, $arr); 

Если вы хотите быть очень ясным и не против иметь функцию, лежащую вокруг:

 function array_first($a) { return reset($a); } $baz = array_map('array_first', $arr); 

Нет, вы не можете сделать это без использования какого-либо цикла …

Чтобы сделать это, просто используйте цикл и сохраните значения в новом массиве или используйте функцию обратного вызова, чтобы получить ваши значения.