比方說,我有這樣的:如何輕鬆地從數組中刪除最後一個逗號?
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
foreach($array as $i=>$k)
{
echo $i.'-'.$k.',';
}
呼應"john-doe,foe-bar,oh-yeah,"
如何甩掉最後一個逗號的?
比方說,我有這樣的:如何輕鬆地從數組中刪除最後一個逗號?
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
foreach($array as $i=>$k)
{
echo $i.'-'.$k.',';
}
呼應"john-doe,foe-bar,oh-yeah,"
如何甩掉最後一個逗號的?
或者您可以使用rtrim
功能:
$result = '';
foreach($array as $i=>$k) {
$result .= $i.'-'.$k.',';
}
$result = rtrim($result,',');
echo $result;
一種方法是使用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);
感謝你的幫助 – Bastien 2010-09-24 05:11:01
後試試這個代碼foreach條件然後echo $ result1
$result1=substr($i, 0, -1);
我不喜歡這種使用substr的想法,因爲它是糟糕的編程風格。這個想法是連接所有元素,並通過特殊的「分離」短語將它們分開。爲此調用子字符串的想法就像使用激光來拍攝鳥類。
在我目前正在處理的項目中,我們試圖擺脫編碼中的不良習慣。這個樣本被認爲是其中之一。我們強迫程序員這樣寫這樣的代碼:
$first = true;
$result = "";
foreach ($array as $i => $k) {
if (!$first) $result .= ",";
$first = false;
$result .= $i.'-'.$k;
}
echo $result;
這段代碼的目的比使用substr的更清晰。或者你可以簡單地使用implode函數(我們的項目是用Java編寫的,所以我們必須設計自己的函數來連接字符串)。只有當你有真正需要時才應該使用substr函數。這應該避免,因爲這是一種糟糕的編程風格。
這是一種糟糕的編程風格嗎?你介意爲我們所有人介紹一下嗎?據我所知,這並不妨礙表演。我可以理解清晰度的一部分,但同時也不難讀出substr做什麼來解決這個問題。謝謝! – 2010-09-24 13:25:49
恕我直言,每個工具都應該在程序中適當地使用,並且它不是用於字符串連接的substr目的,而是針對其他問題而設計的。此外,與substr的這個代碼看起來很清楚,只有它在一個地方。如果有這樣的許多碎片,代碼就變成不可讀的。因此,在我們的項目中,我們改爲正常連接,併爲此做了一個特殊功能。現在處理字符串的項目的部分更具可讀性。 – 2010-09-25 13:51:31
非常感謝你爲這個偉大而專業的解決方案。 (y) – 2016-04-10 13:47:34
我一直用這個方法:
$result = '';
foreach($array as $i=>$k) {
if(strlen($result) > 0) {
$result .= ","
}
$result .= $i.'-'.$k;
}
echo $result;
對此使用strlen的錯誤主意。請參閱Joel Spolsky的「返回基礎知識」文章,以瞭解爲什麼。只需使用一個布爾標誌來執行這樣的檢查,因爲在最壞的情況下(數組有N個元素 - 單個字符),您將以O(N^2)複雜度結束。 – 2010-09-24 06:15:41
一般來說,不要使用字符串函數來達到某些效果,這可以通過簡單的編程技巧輕鬆實現(對於使用substr來消除最後一個逗號也是如此 - 最好不要生成最後一個comman)。 – 2010-09-24 06:17:46
我不喜歡所有以前的食譜。
Php不是C,並有更高級別的方法來處理這個特定的問題。
我將開始從那裏你有一個這樣的數組點:
$array = array('john-doe', 'foe-bar', 'oh-yeah');
你可以建立從使用循環或array_map()功能的初始一個這樣的數組。請注意,我正在使用單引號字符串。如果您沒有需要替換的變量名稱,這是一個微型優化。
現在你需要生成此數組一個CSV字符串,這是可以做到這樣的:
echo implode(',', $array);
這種方法的好處是我們可以更容易地更改分隔符。此外,您可以將字符串分解爲稍後類似於此的數組。對於更清潔的方法,不確定性能缺陷 – thethanghn 2010-09-24 06:36:58
+1。 – NikiC 2010-09-24 06:43:51
我更喜歡這個。如果你不需要,不要循環。 – Powertieke 2010-09-24 06:44:02
這會做:
rtrim ($string, ',')
假設數組的索引,這是爲我工作。我循環$ 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++;
}
看到這個例子中,你可以很容易地理解
$name = ["sumon","karim","akash"];
foreach($name as $key =>$value){
echo $value;
if($key<count($name){
echo ",";
}
}
是啊,忘了微調。 +1 – 2010-09-24 05:06:59
我更喜歡這個,謝謝。 – Bastien 2010-09-24 05:16:09
太糟糕了php不支持'unset($ result [strlen($ result)-1])''。這將是非常好的... – NikiC 2010-09-24 06:44:38