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