Comment créer une liste séparée par une virgule À partir d'un tableau en PHP?

je sais faire une boucle à travers les éléments d'un tableau en utilisant un foreach et ajouter une virgule, Mais c'est toujours une douleur d'avoir à enlever la virgule finale. Y a-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"
95
demandé sur NullUserException 2010-03-12 22:23:34

11 réponses

vous voulez utiliser implose pour cela.

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


il y a une façon d'ajouter des virgules sans les suivre. Tu voudrais faire ça si tu dois faire d'autres manipulations en même temps. Par exemple, peut-être voulez-vous citer chaque fruit et puis les séparer tous par des virgules:

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

aussi, si vous le faites juste de la manière "normale" de ajouter une virgule après chaque élément (comme il semble que vous faisiez avant), et vous devez couper la dernière, juste faire $list = rtrim($list, ', ') . Je vois beaucoup de gens qui se moquent inutilement de substr dans cette situation.

198
répondu ryeguy 2016-09-28 22:01:43

C'est comme ça que je l'ai fait:

$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

Live Demo: http://ideone.com/EWK1XR

EDIT: Par @joseantgv de commentaires, vous serez en mesure de supprimer rtrim() à partir de l'exemple ci-dessus. I. e:

$string = implode(',', $arr);
34
répondu Nate 2015-07-04 00:30:56

pour le développeur qui veut 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
3
répondu Waqar Alamgir 2014-10-22 07:15:08

je préfère utiliser une instruction if dans la boucle qui vérifie que la version actuelle n'est pas la dernière valeur du tableau. Dans la négative, ajouter 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
répondu Lloyd Banks 2016-01-12 15:52:55

similaire à 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
répondu ceasetodream 2014-02-05 14:54:06

parfois vous n'avez même pas besoin de php pour cela dans certains cas (les éléments de liste sont chacun dans leur propre étiquette Générique sur le rendu par exemple) vous pouvez toujours ajouter des virgules à tous les éléments mais le dernier-enfant via css s'ils sont des éléments séparés après avoir été rendus à partir du script.

Je l'utilise beaucoup dans les applications de base en fait pour couper certains gras de code arbitraire:

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

regarde essentiellement l'élément, cible Tous sauf le dernier élément, et à chaque fois on ajoute une virgule. Juste une autre façon de ne pas avoir à utiliser le script si le cas s'applique.

1
répondu Lux.Capacitor 2014-03-13 18:07:07

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
répondu Danielside 2017-02-10 13:21:50
$fruit = array('apple', 'banana', 'pear', 'grape');    
$commasaprated = implode(',' , $fruit);
0
répondu Vijay Prajapati 2017-03-21 09:34:39

Si je faisais de la cité des réponses, vous pouvez faire

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

ce qui précède suppose que le fruit est non nul. Si vous ne voulez pas faire cette hypothèse, vous pouvez utiliser un if-then-else ou ternaire (?:) opérateur.

-1
répondu vogomatix 2014-01-27 11:41:35

une autre façon pourrait être comme ceci:

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

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

sortie de $result est une liste bien formatée séparée par des virgules.

a, b, c, d, e, f, g
-2
répondu Jago 2014-01-30 06:22:07
$letters = array("a", "b", "c", "d", "e", "f", "g"); // this array can n no. of values
$result = substr(implode(", ", $letters), 0);
echo $result

sortie - > a,b,C,D,e,f, g

-2
répondu Sanjay Arora 2015-04-10 12:24:36