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