Wie erstelle ich eine kommagetrennte Liste von einem Array in PHP?

Ich weiß, wie man mit foreach Elemente eines Arrays durchläuft und ein Komma anfügt, aber es ist immer ein Problem, das letzte Komma entfernen zu müssen. Gibt es eine einfache PHP-Methode?

$fruit = array('apple', 'banana', 'pear', 'grape'); 

Letztendlich will ich

 $result = "apple, banana, pear, grape" 

Sie möchten das implodieren .

$commaList = implode(', ', $fruit); : $commaList = implode(', ', $fruit);


Es gibt eine Möglichkeit, Kommas anzufügen, ohne dass sie ein Komma haben. Sie möchten dies tun, wenn Sie gleichzeitig andere Manipulationen vornehmen müssen. Zum Beispiel möchten Sie vielleicht jede Frucht zitieren und dann alle durch Kommas trennen:

 $prefix = $fruitList = ''; foreach ($fruits as $fruit) { $fruitList .= $prefix . '"' . $fruit . '"'; $prefix = ', '; } 

Wenn Sie nur die “normale” Art und Weise verwenden, nach jedem Element ein Komma anzuhängen (wie es sich anhört), und Sie müssen die letzte abschneiden, tun Sie einfach $list = rtrim($list, ', ') . Ich sehe eine Menge Leute, die in dieser Situation unnötigerweise mit substr .

So habe ich es gemacht:

 $arr = array(1,2,3,4,5,6,7,8,9); $string = rtrim(implode(',', $arr), ','); echo $string; 

Ausgabe:

 1,2,3,4,5,6,7,8,9 

Live-Demo: http://ideone.com/EWK1XR

EDIT: Per @ joseantgv’s Kommentar, Sie sollten in der Lage sein, rtrim() aus dem obigen Beispiel zu entfernen. Dh:

 $string = implode(',', $arr); 

Für Entwickler, die Ergebnisse mit and am Ende möchten, können Sie den folgenden Code verwenden:

 $titleString = array('apple', 'banana', 'pear', 'grape'); $totalTitles = count($titleString); if($totalTitles>1) { $titleString = implode(', ' , array_slice($titleString,0,$totalTitles-1)) . ' and ' . end($titleString); } else { $titleString = implode(', ' , $titleString); } echo $titleString; // apple, banana, pear and grape 

Ich bevorzuge es, eine IF-statement in der FOR-Schleife zu verwenden, die überprüft, um sicherzustellen, dass die aktuelle Iteration nicht der letzte Wert im Array ist. Wenn nicht, füge ein Komma hinzu

 $fruit = array("apple", "banana", "pear", "grape"); for($i = 0; $i < count($fruit); $i++){ echo "$fruit[$i]"; if($i < (count($fruit) -1)){ echo ", "; } } 

Ähnlich wie Lloyd’s Antwort, funktioniert aber mit jeder Größe Array.

 $missing = array(); $missing[] = 'name'; $missing[] = 'zipcode'; $missing[] = 'phone'; if( is_array($missing) && count($missing) > 0 ) { $result = ''; $total = count($missing) - 1; for($i = 0; $i < = $total; $i++) { if($i == $total && $total > 0) $result .= "and "; $result .= $missing[$i]; if($i < $total) $result .= ", "; } echo 'You need to provide your '.$result.'.'; // Echos "You need to provide your name, zipcode, and phone." } 

Manchmal brauchen Sie nicht einmal PHP in bestimmten Fällen (Listenelemente sind zum Beispiel in einem eigenen generischen Tag zum Rendern). Sie können immer Kommas zu allen Elementen hinzufügen, aber last-child via CSS, wenn sie nach dem Rendern separate Elemente sind aus dem Skript.

Ich benutze das oft in Backbone-Anwendungen, um etwas willkürliches Code-Fett zu trimmen:

 .likers a:not(:last-child):after { content: ","; } 

Betrachtet grundsätzlich das Element, zielt auf alle bis auf das letzte Element und fügt nach jedem Element ein Komma hinzu. Nur eine alternative Möglichkeit, das Skript überhaupt nicht zu verwenden, wenn der Fall zutrifft.

Eine funktionierende Lösung würde so aussehen:

 $fruit = array('apple', 'banana', 'pear', 'grape'); $sep = ','; array_reduce( $fruits, function($fruitsStr, $fruit) use ($sep) { return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit); }, '' ); 
 $fruit = array('apple', 'banana', 'pear', 'grape'); $commasaprated = implode(',' , $fruit); 

Wenn Sie Antworten zitieren, können Sie tun

 $commaList = '"'.implode( '" , " ', $fruit). '"'; 

Das obige nimmt an, dass Frucht nicht null ist. Wenn Sie diese Annahme nicht machen möchten, können Sie eine if-then-else-statement oder einen ternären Operator (? 🙂 verwenden.

Ein anderer Weg könnte so aussehen:

 $letters = array("a", "b", "c", "d", "e", "f", "g"); $result = substr(implode(", ", $letters), 0, -3); 

Die Ausgabe von $result ist eine gut formatierte, durch Kommas getrennte Liste.

 a, b, c, d, e, f, g 
 $letters = array("a", "b", "c", "d", "e", "f", "g"); // this array can n no. of values $result = substr(implode(", ", $letters), 0); echo $result 

Ausgabe-> a, b, c, d, e, f, g