2010-09-24 147 views

回答

16

或者您可以使用rtrim功能:

$result = ''; 
foreach($array as $i=>$k) { 
    $result .= $i.'-'.$k.','; 
} 
$result = rtrim($result,','); 
echo $result; 
+3

是啊,忘了微調。 +1 – 2010-09-24 05:06:59

+0

我更喜歡這個,謝謝。 – Bastien 2010-09-24 05:16:09

+0

太糟糕了php不支持'unset($ result [strlen($ result)-1])''。這將是非常好的... – NikiC 2010-09-24 06:44:38

7

一種方法是使用substr

$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah"); 

$output = ""; 
foreach($array as $i=>$k) 
{ 
    $output .= $i.'-'.$k.','; 
} 

$output = substr($output, 0, -1); 

echo $output; 

另一種方法是使用implode

$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah"); 

$output = array(); 
foreach($array as $i=>$k) 
{ 
    $output[] = $i.'-'.$k; 
} 

echo implode(',', $output); 
+0

感謝你的幫助 – Bastien 2010-09-24 05:11:01

0

後試試這個代碼foreach條件然後echo $ result1

$result1=substr($i, 0, -1); 
3

我不喜歡這種使用substr的想法,因爲它是糟糕的編程風格。這個想法是連接所有元素,並通過特殊的「分離」短語將它們分開。爲此調用子字符串的想法就像使用激光來拍攝鳥類。

在我目前正在處理的項目中,我們試圖擺脫編碼中的不良習慣。這個樣本被認爲是其中之一。我們強迫程序員這樣寫這樣的代碼:

$first = true; 
$result = ""; 
foreach ($array as $i => $k) { 
    if (!$first) $result .= ","; 
    $first = false; 
    $result .= $i.'-'.$k; 
} 
echo $result; 

這段代碼的目的比使用substr的更清晰。或者你可以簡單地使用implode函數(我們的項目是用Java編寫的,所以我們必須設計自己的函數來連接字符串)。只有當你有真正需要時才應該使用substr函數。這應該避免,因爲這是一種糟糕的編程風格。

+0

這是一種糟糕的編程風格嗎?你介意爲我們所有人介紹一下嗎?據我所知,這並不妨礙表演。我可以理解清晰度的一部分,但同時也不難讀出substr做什麼來解決這個問題。謝謝! – 2010-09-24 13:25:49

+0

恕我直言,每個工具都應該在程序中適當地使用,並且它不是用於字符串連接的substr目的,而是針對其他問題而設計的。此外,與substr的這個代碼看起來很清楚,只有它在一個地方。如果有這樣的許多碎片,代碼就變成不可讀的。因此,在我們的項目中,我們改爲正常連接,併爲此做了一個特殊功能。現在處理字符串的項目的部分更具可讀性。 – 2010-09-25 13:51:31

+0

非常感謝你爲這個偉大而專業的解決方案。 (y) – 2016-04-10 13:47:34

1

我一直用這個方法:

$result = ''; 
foreach($array as $i=>$k) { 
    if(strlen($result) > 0) { 
     $result .= "," 
    } 
    $result .= $i.'-'.$k; 
} 
echo $result; 
+0

對此使用strlen的錯誤主意。請參閱Joel Spolsky的「返回基礎知識」文章,以瞭解爲什麼。只需使用一個布爾標誌來執行這樣的檢查,因爲在最壞的情況下(數組有N個元素 - 單個字符),您將以O(N^2)複雜度結束。 – 2010-09-24 06:15:41

+0

一般來說,不要使用字符串函數來達到某些效果,這可以通過簡單的編程技巧輕鬆實現(對於使用substr來消除最後一個逗號也是如此 - 最好不要生成最後一個comman)。 – 2010-09-24 06:17:46

10

我不喜歡所有以前的食譜。

Php不是C,並有更高級別的方法來處理這個特定的問題。

我將開始從那裏你有一個這樣的數組點:

$array = array('john-doe', 'foe-bar', 'oh-yeah'); 

你可以建立從使用循環或array_map()功能的初始一個這樣的數組。請注意,我正在使用單引號字符串。如果您沒有需要替換的變量名稱,這是一個微型優化。

現在你需要生成此數組一個CSV字符串,這是可以做到這樣的:

echo implode(',', $array); 
+0

這種方法的好處是我們可以更容易地更改分隔符。此外,您可以將字符串分解爲稍後類似於此的數組。對於更清潔的方法,不確定性能缺陷 – thethanghn 2010-09-24 06:36:58

+0

+1。 – NikiC 2010-09-24 06:43:51

+0

我更喜歡這個。如果你不需要,不要循環。 – Powertieke 2010-09-24 06:44:02

0

這會做:

rtrim ($string, ',') 
1

假設數組的索引,這是爲我工作。我循環$ i並測試$ $對$鍵。當密鑰結束時,逗號不會打印。請注意,IF有兩個值可確保第一個值在開始時沒有逗號。

foreach($array as $key => $value) 
{ 
    $w = $key; 
    //echo "<br>w: ".$w."<br>";// test text 
    //echo "x: ".$x."<br>";// test text 
    if($w == $x && $w != 0) 
    { 
    echo ", "; 
    } 
    echo $value; 
    $x++; 
} 
0

看到這個例子中,你可以很容易地理解

$name = ["sumon","karim","akash"]; 
foreach($name as $key =>$value){ 
echo $value; 
if($key<count($name){ 
    echo ","; 
} 
} 
相關問題