Ich weiß, wie man Elemente eines Arrays mit foreach durchläuft und ein Komma anfügt, aber es ist immer ein Schmerz, das letzte Komma abnehmen zu müssen. Gibt es eine einfache PHP Methode, dies zu tun?
$fruit = array('Apple', 'banana', 'pear', 'grape');
Letztendlich will ich
$result = "Apple, banana, pear, grape"
Sie möchten dafür implode verwenden.
dh: $commaList = implode(', ', $fruit);
Es gibt eine Möglichkeit, Kommas anzuhängen, ohne dass ein Komma nachgestellt wird. Sie möchten dies tun, wenn Sie gleichzeitig eine andere Manipulation durchführen 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 einfach nach jedem Element ein "normales" Komma anfügen (wie es sich anhört, als ob Sie es zuvor getan hätten) und Sie das letzte abschneiden müssen, tun Sie einfach $list = rtrim($list, ', ')
. Ich sehe eine Menge Leute, die in dieser Situation unnötigerweise mit substr
rumalbern.
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 @ joseantgvs Kommentar sollten Sie rtrim()
aus dem obigen Beispiel entfernen können. I.e:
$string = implode(',', $arr);
Für Entwickler, die mit and
am Ende ein Ergebnis erzielen möchten, kann der folgende Code verwendet werden:
$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 die Verwendung einer IF-Anweisung in der FOR-Schleife, die überprüft, ob die aktuelle Iteration nicht der letzte Wert im Array ist. Wenn nicht, fügen Sie 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 answer, funktioniert aber mit jeder Arraygröße.
$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 benötigen Sie dazu in bestimmten Fällen nicht einmal php. (Listenelemente befinden sich in einem eigenen generischen Tag, z. B. beim Rendern.) Sie können allen Elementen mit Ausnahme von last-child über css immer Kommas hinzufügen, wenn sie nach dem Rendern separate Elemente sind aus dem Skript.
Ich verwende dies häufig in Backbone-Apps, um den Code von beliebigem Code abzuschneiden:
.likers a:not(:last-child):after { content: ","; }
Sieht im Wesentlichen das Element an, zielt auf alle Elemente außer dem letzten Element ab und fügt nach jedem Element ein Komma hinzu. Nur eine Alternative, um überhaupt kein Skript verwenden zu müssen, wenn der Fall zutrifft.
$fruit = array('Apple', 'banana', 'pear', 'grape');
$commasaprated = implode(',' , $fruit);
Eine funktionale Lösung würde folgendermaßen aussehen:
$fruit = array('Apple', 'banana', 'pear', 'grape');
$sep = ',';
array_reduce(
$fruits,
function($fruitsStr, $fruit) use ($sep) {
return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit);
},
''
);