У меня есть общий шаблон, для обработки которого, я уверен, в 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
из каждого подмассива, которых может быть любое количество.
Я всегда заканчиваю тем, что просто перебираю каждый массив, чтобы получить нужные значения, но я уверен, что должен быть более простой и эффективный способ справиться с этим.
В настоящее время я использую следующий простой 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
(см. COil's answer).
Начиная с версии 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"
}
Единственное отличие от принятого ответа заключается в том, что вы потеряете оригинальное имя ключа, но я думаю, что в вашем случае это не проблема.