web-dev-qa-db-fra.com

Comment créer une liste séparée par des virgules d'un tableau en PHP?

Je sais comment parcourir les éléments d'un tableau en utilisant foreach et ajouter une virgule, mais il est toujours pénible de devoir supprimer la virgule finale. Existe-t-il un moyen simple PHP de le faire?

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

En fin de compte je veux 

$result = "Apple, banana, pear, grape"
97
st4ck0v3rfl0w

Vous voulez utiliser implode pour cela.

c'est-à-dire: $commaList = implode(', ', $fruit);


Il existe un moyen d'ajouter des virgules sans en avoir un dernier. Vous voudrez faire cela si vous devez faire une autre manipulation en même temps. Par exemple, vous voudrez peut-être citer chaque fruit, puis les séparer tous par une virgule:

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

De plus, si vous faites simplement la méthode "normale" consistant à ajouter une virgule après chaque élément (comme si vous le faisiez auparavant), et que vous devez supprimer le dernier élément, faites simplement $list = rtrim($list, ', '). Je vois beaucoup de gens qui s'amusent inutilement avec substr dans cette situation.

205
ryeguy

Voici comment je le fais:

$arr = array(1,2,3,4,5,6,7,8,9);

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

echo $string;

Sortie:

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

Démo en direct: http://ideone.com/EWK1XR

EDIT: D'après le commentaire de @ joseantgv, vous devriez pouvoir supprimer rtrim() de l'exemple ci-dessus. C'est à dire:

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

Pour le développeur qui veut un résultat avec and à la fin peut utiliser le code suivant:

$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

Je préfère utiliser une instruction IF dans la boucle FOR qui vérifie que l'itération actuelle n'est pas la dernière valeur du tableau. Sinon, ajoutez une virgule

$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

Semblable à la réponse de Lloyd, mais fonctionne avec n'importe quel tableau de taille.

$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

Parfois, vous n'avez même pas besoin de php pour cela dans certains cas (les éléments de la liste sont chacun dans leur propre balise générique, par exemple). Vous pouvez toujours ajouter des virgules à tous les éléments sauf last-child via css s'ils sont séparés après leur rendu. du script. 

En fait, je l’utilise beaucoup dans les applications de réseau principal pour couper du code arbitraire:

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

Fondamentalement, examine l'élément, cible tout sauf le dernier élément, et ajoute une virgule après chaque élément. Juste un autre moyen de ne pas avoir à utiliser de script du tout si le cas s’applique.

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

Une solution fonctionnelle irait comme ceci:

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

array_reduce(
    $fruits,
    function($fruitsStr, $fruit) use ($sep) {
        return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit);
    },
    ''
);
0
Danielside