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

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 .

Ryeguy
quelle
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);
Nate
quelle
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
Waqar Alamgir
quelle
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."
        }
ceasetodream
quelle
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 ", ";
    }
}
Lloyd Banks
quelle
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.

Lux.Kondensator
quelle
1
$fruit = array('apple', 'banana', 'pear', 'grape');    
$commasaprated = implode(',' , $fruit);
Vijay Prajapati
quelle
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);
    },
    ''
);
Danielside
quelle
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;
Schöner Islam
quelle
-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.

Vogomatix
quelle
-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
Jago
quelle
-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

Sanjay Arora
quelle