2012-04-22 60 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