2014-03-31 139 views
6

有沒有什麼辦法可以在不使用foreach循環的情況下獲取一個數組中的所有值?獲取數組值無foreach循環

<?php 
$foo = array(["type"=>"a"], ["type"=>"b"], ["type"=>"c"]); 

我需要輸出爲array("a", "b", "c")

我可以使用這樣的事情

$stack = []; 

foreach($foo as $value){ 
    $stack[] = $value["type"]; 
} 

var_dump($stack); 

完成它可是,我找不使用foreach循環涉及的選項。

+0

你想使用for循環嗎? – magnetronnie

+0

@magnetronnie更糟:) – iOi

回答

12

如果你使用PHP 5.5 +,你可以使用array_column(),像這樣:

$result = array_column($foo, 'type'); 

如果你想與數字索引的數組,使用:

$result = array_values(array_column($foo, 'type')); 

如果你使用以前的PHP版本並且目前無法升級,則可以使用由同一作者編寫的Userland implementation of array_column()函數。您也可以使用array_map()。這與循環基本相同,只是沒有明確顯示循環。

$result = array_map(function($arr) { 
    return $arr['type']; 
}, $foo); 
+1

可悲的是我沒有使用5.5我應該。 – iOi

+1

'array_values()'在這裏不是必需的,因爲'array_column()'將返回所需的數組。 –

+0

@AlmaDo:我知道。我只是想,也許OP想要用數字索引來獲得一個數組。 –

4

要麼使用array_column()爲PHP 5.5:

$foo = array(["type"=>"a"], ["type"=>"b"], ["type"=>"c"]); 
$result = array_column($foo, 'type'); 

或者使用array_map()以前版本:

$result = array_map(function($x) 
{ 
    return $x['type']; 
}, $foo); 

注:循環將仍然執行,但它會被藏在裏面上述功能。