我有一个共同的模式,我确信在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"
)
);
我需要从每个subArray获取key1
值,其中可以有任何数字。
我总是最终只是遍历每个数组以获得所需的值,但我确信必须有一种更简单,更有效的方法来处理它。
我目前正在使用以下简单的foreach来解析数组:
$preparedSubs = array();
foreach($testArray as $subArray) {
$preparedSubs[] = $subArray['key1'];
}
它尽可能短,但正如我所说,我确信有一个PHP构造可以更好地处理它。
答案 0 :(得分:38)
在PHP 5.5之前,这将是最有效的解决方案:
$key = 'key1';
$output = array_map(function($item) use ($key) {
return $item[$key];
}, $testArray);
自PHP 5.5起,现在有一个array_column
函数(参见COil's answer)。
答案 1 :(得分:23)
从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"
}
与接受的答案的唯一区别在于您丢失了原始密钥名称,但我认为这不是您的问题。