从每个子数组中获取特定元素

Mar*_*ace 31 php arrays

我有一个共同的模式,我确信在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的答案).

  • 注意:php 5.3支持[PHP Closures](http://php.net/manual/en/class.closure.php),所以这个方法从5.3开始就没问题,5.5之后也没用. (5认同)

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)

与接受的答案的唯一区别在于您丢失了原始密钥名称,但我认为这不是您的问题.

  • +1为新的原生函数.您可以使用`array_combine(array_keys($ testArray),array_column($ testArray,$ key))`保留原始键. (6认同)