У меня есть общий шаблон, в котором я уверен, что в PHP должна быть встроенная функция массива, но она просто не может ее увидеть.
У меня есть несколько массивов, например:
$testArray = array ( 'subArray1' => array( 'key1' => "Sub array 1 value 1", 'key2' => "Sub array 1 value 1" ), 'subArray2' => array( 'key1' => "Sub array 2 value 1", 'key2' => "Sub array 2 value 2" ) );
Мне нужно получить значения key1
из каждого subArray, из которых может быть любое число.
Я всегда заканчиваю просто цикл по каждому массиву, чтобы получить требуемые значения, но я уверен, что должен быть более простой и эффективный способ справиться с этим.
В настоящее время я использую следующий простой foreach для анализа массивов:
$preparedSubs = array(); foreach($testArray as $subArray) { $preparedSubs[] = $subArray['key1']; }
Это так коротко, как я могу это сделать, но, как я уже сказал, я уверен, что есть конструкция PHP, которая справится с этим лучше.
До PHP 5.5 это было бы наиболее эффективным решением:
$key = 'key1'; $output = array_map(function($item) use ($key) { return $item[$key]; }, $testArray);
Начиная с PHP 5.5, для этой функции теперь существует функция array_column
(см . Ответ Койла ).
Начиная с PHP 5.5 вы можете использовать функцию array_column () :
$key = 'key1'; $testArray = array ( 'subArray1' => array( 'key1' => "Sub array 1 value 1", 'key2' => "Sub array 1 value 2" ), 'subArray2' => array( 'key1' => "Sub array 2 value 1", 'key2' => "Sub array 2 value 2" ) ); $output = array_column($testArray, $key); var_dump($output);
Вывод:
array(2) { [0]=> string(19) "Sub array 1 value 1" [1]=> string(19) "Sub array 2 value 1" }
Единственное отличие от принятого ответа состоит в том, что вы теряете исходное имя ключа, но я думаю, что это не проблема в вашем случае.