Массив выглядит так:
$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);
Нет, вы не можете сделать это без использования какого-либо цикла …
Чтобы сделать это, просто используйте цикл и сохраните значения в новом массиве или используйте функцию обратного вызова, чтобы получить ваши значения.