Получить определенный элемент из каждого вспомогательного массива
У меня есть общий шаблон, который Im уверен, что в 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, которая справится с этим лучше.
Ответы
Ответ 1
До PHP 5.5 это было бы наиболее эффективным решением:
$key = 'key1';
$output = array_map(function($item) use ($key) {
return $item[$key];
}, $testArray);
Как и в случае с PHP 5.5, для этого теперь есть функция array_column
(см. Ответ на COil).
Ответ 2
Начиная с 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"
}
Единственное отличие от принятого ответа состоит в том, что вы теряете исходное имя ключа, но я думаю, что это не проблема в вашем случае.