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"
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.
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);
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
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 ", ";
}
}
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."
}
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.
$fruit = array('Apple', 'banana', 'pear', 'grape');
$commasaprated = implode(',' , $fruit);
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);
},
''
);