2012-04-22 59 views
27

我有一个常见模式,我确定必须在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构建,将处理这个更好。

+0

你想从每个子数组中获取key1值并将其存储到另一个数组中? – 2012-04-22 13:36:58

+0

@Rohan - 最好是属于该密钥的值,或者同时包含密钥和值。我现在使用 – 2012-04-22 13:38:24

回答

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)。

+5

来发布foreach循环。注意:PHP 5.3支持[PHP Closures](http://php.net/manual/en/class.closure.php),所以这种方法可以从5.3开始,而且不会需要5.5之后 – Andron 2015-09-30 13:29:02

+0

下面的答案也能起作用:)其简单很多谢谢 – BlackBurn027 2016-11-28 11:42:18

+1

这个问题在PHP 5.5发布之前就被问到了。我更新了我的问题,以反映当COil的答案在3年后添加时:-) – cmbuckley 2016-11-29 12:58:10

20

由于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" 
} 

与接受的答案,唯一的区别是,你失去了原有的键名,但我认为这对你的情况不是问题。

+5

对于新的本机功能。你可以用'array_combine(array_keys($ testArray),array_column($ testArray,$ key))'保留原始键。 – cmbuckley 2015-01-21 17:21:15