2013-09-26 102 views
2

我有這樣如何高效地從數組中獲取特定值?

array(3) { 
    [0]=> 
    array(2) { 
    ["company"]=> 
    string(15) "Company A" 
    ["value"]=> 
    string(6) "100" 
    } 
    [1]=> 
    array(2) { 
    ["company"]=> 
    string(9) "Company B" 
    ["value"]=> 
    string(6) "150" 
    } 
    [2]=> 
    array(2) { 
    ["company"]=> 
    string(13) "Company C" 
    ["value"]=> 
    string(6) "200" 
    } 
} 

數組現在我想所有的公司名稱和commata將它們連接起來。我可以是這樣的:

foreach ($array as $a) { 
    $companies[] = $a['company']; 
} 
$company_names = implode(',', $companies); 
var_dump($company_names); 

打印

string(29) "Company A,Company B,Company C" 

這麼說:它的工作原理。但是這對我來說似乎是無效的,那個循環就是這樣。

是否有更有效的方法來達到相同的結果?例如。使用array_keys還是東西?

+1

我對此表示懷疑。爲了獲得價值觀,你必須以這種或那種方式循環。 –

+0

你是否建議內置函數不循環?因爲這被認爲是低效率的,你需要比3家公司多得多。一般來說,這種處理在系統需求上相當低。如有疑問,基準或編寫緩存腳本。 –

+0

我同意,我認爲你和你一樣好。可能是您在構建陣列時進行的優化。 – SamA

回答

4

您可以使用array_column()但它需要的PHP版本大於5.5:

$array = array_column($companies, 'company'); 
echo implode(',', $array); 
+0

並且在php <5.5的手冊中有一些解決方案 –

+1

[For php <5.5](http://benramsey.com/blog/2013/07/the-array-column-php-userland-library/) –

1

使用array_column()賦序建議:

$array = array_column($companies, 'company'); 
echo implode(',', $array); 

Demo!

1

是否有更有效的方法來同樣的結果?

高效是一個廣義術語。我會假設高效本地。在這種情況下,是的,在PHP 5.5+中,您可以使用array_column()作爲answered by Fu Xu

否則,在PHP < 5.5,沒有。那就是沒有什麼原生。雖然你可以結合幾十個本地PHP array functions來實現同樣的目標,但它們只不過是更多的方法來給貓加皮膚。

+0

那麼,正如在上面的評論中提到的那樣,在這種情況下的有效手段:對於相同的結果,較少的代碼行。 –

+1

答案保持不變。較少的代碼行並不總是更好。更清楚*不*更聰明*。 –

+0

爲真正的(儘管不是普遍的)真理+1。 –

相關問題