wake-up-neo.net

Wie erstellt man eine durch Kommas getrennte Liste aus einem Array in PHP?

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"
97
st4ck0v3rfl0w

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.

217
ryeguy

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);
35
Nate

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
4
Waqar Alamgir

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 ", ";
    }
}
3
Lloyd Banks

Ä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."
        }
2
ceasetodream

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.

1
Lux.Capacitor
$fruit = array('Apple', 'banana', 'pear', 'grape');    
$commasaprated = implode(',' , $fruit);
0
Vijay Prajapati

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);
    },
    ''
);
0
Danielside