Wie erstelle ich eine durch Kommas getrennte Liste aus einem Array in PHP?


113

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 entfernen zu müssen. Gibt es eine einfache PHP-Methode?

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

Letztendlich will ich

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

Antworten:


230

Sie möchten implode verwenden .

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


Es gibt eine Möglichkeit, Kommas anzuhängen, ohne ein nachfolgendes zu haben. 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 sie dann alle durch Kommas trennen:

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

Wenn Sie es einfach auf die "normale" Weise tun, nach jedem Element ein Komma anzuhängen (wie es sich anhört, als hätten Sie es zuvor getan), und Sie das letzte abschneiden müssen, tun Sie es einfach $list = rtrim($list, ', '). Ich sehe viele Leute, die substrin dieser Situation unnötig herumspielen .


4
Es wäre sinnvoller (wenn Sie versuchen, Anführungszeichen hinzuzufügen), <code> $ obstlist = '"' aufzurufen. Implode ('", "', $
obst

Die foreach-Schleife ist besser, wenn Sie diese Daten im Array bearbeiten möchten, bevor Sie sie in eine Zeichenfolge umwandeln. Zum Beispiel Addslashes oder mysql_real_escape_string.
Naphtali Gilead

39

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

BEARBEITEN : Gemäß dem Kommentar von @ joseantgv sollten Sie in der Lage sein, rtrim()aus dem obigen Beispiel zu entfernen . Dh:

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

5
Wie oben beantwortet, könnten Sie einfach implodieren (',', $ arr)
joseantgv

@ joseantgv Du hast recht, ich weiß nicht warum ich benutze rtrim(). Ich erinnere mich an ein Problem mit zusätzlichen Kommas am Ende der Zeichenfolge, kann mich aber nicht an die Situation erinnern, in der es passiert ist.
Nate

5

Ergebnis mit andam Ende:

$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

3

Ähnlich wie Lloyd's Antwort, funktioniert jedoch mit Arrays jeder Größ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."
        }

3

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

2
Ist die Gesamtzahl nur anders als 4?
Jyothish

1

Manchmal benötigen Sie dafür in bestimmten Fällen nicht einmal PHP (Listenelemente befinden sich beispielsweise beim Rendern in einem eigenen generischen Tag). Sie können allen Elementen, außer dem letzten Kind, über CSS jederzeit Kommas hinzufügen, wenn es sich nach dem Rendern um separate Elemente handelt aus dem Skript.

Ich benutze dies häufig in Backbone-Apps, um beliebiges Codefett zu reduzieren:

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

Betrachtet im Grunde das Element, zielt auf alle außer dem letzten Element ab und fügt nach jedem Element ein Komma hinzu. Nur eine alternative Möglichkeit, kein Skript verwenden zu müssen, wenn der Fall zutrifft.


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

0

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

Folgen Sie diesem

$teacher_id = '';

        for ($i = 0; $i < count($data['teacher_id']); $i++) {

            $teacher_id .= $data['teacher_id'][$i].',';

        }
        $teacher_id = rtrim($teacher_id, ',');
        echo $teacher_id; exit;

-1

Wenn Sie zitierte Antworten geben, können Sie dies tun

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

Das Obige geht davon aus, dass Obst nicht null ist. Wenn Sie diese Annahme nicht treffen möchten, können Sie eine if-then-else-Anweisung oder einen ternären (? :) Operator verwenden.


-2

Ein anderer Weg könnte so sein:

$letters = array("a", "b", "c", "d", "e", "f", "g");

$result = substr(implode(", ", $letters), 0, -3);

Die Ausgabe von $resultist eine schön formatierte, durch Kommas getrennte Liste.

a, b, c, d, e, f, g

-2
$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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.