2012-05-29 73 views
-1

可能重複:
comma separated list in php讓此PHP代碼更有效率?

問題:

我希望能夠通過未知大小的一個列表進行迭代,並吐出一個逗號分隔的列表。

例如:

Input: 
    $data = array(); 
    $data[0]['productId'] = 11; 
    $data[1]['productId'] = 22; 
    $data[2]['productId'] = 33; 
    $data[3]['productId'] = 44; 

下面的代碼的伎倆:

$prodsToCheck = ""; 
foreach ($data as $d) { 
    $prodsToCheck .= $d['productId'].", "; 
} 
$prodsToCheck = substr($prodsToCheck, 0, strlen($prodsToCheck) - 2); // THIS IS THE IMPORTANT PART 

print $prodsToCheck; die(); 

結果必須是

11,第22,33,44

和NOT:

11,22,33,44,

這不可能做到這一點的最快捷的方法......是什麼?

+3

我認爲這是值得一提:您輸入數組不有一個關鍵'productId'。 – KingCrunch

+0

我有時也想知道這樣的功能。你的方式雖然不是最優雅的,但仍可能是最快的。請考慮,對於其他每個解決方案,都會對陣列的每個元素進行一些(小)檢查。 – cypherabe

回答

4

你的例子和你的代碼是不一致的,所以我決定忽略這個例子,否則這個問題太簡單了。

您可以使用破滅,array_map和匿名函數是這樣的:

$prodsToCheck = implode(
    ", ", 
    array_map(
     function($element) { return $element['productId'];}, 
     $data)); 

完全未經測試,應該用PHP工作5.3+

+0

代碼太多。我試圖找到一條線來解決這個... – coderama

+1

@RD。我真的很想只爲這個「太多的代碼」而低估這個評論:D你絕對無法得到像這樣的更多壓縮解決方案。此外:你甚至可以把它寫在一行上;) – KingCrunch

+0

好吧....我真的認爲有一種方法可以使用implode或explode或其他數組函數來快速完成此操作。但似乎這可能是最快的方法。現在要貶低它... – coderama

0

print implode(", ", $array);

閱讀上implode

+2

看起來OP只想要productID鍵的值,但輸入數組使得這個混淆不清 –

+1

@WouterH; OP:請參考greg0ire的答案,如果這就是你要找的。這很難說。 –

+1

-1:SO真的很擅長提供一個完全錯誤的答案。這種方式只適用於一維數組。 –