153 votes

php implode (101) avec des guillemets

Implosion d'un tableau simple

ressemblerait à ceci

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);

et cela renverrait ceci

 lastname,email,phone

Super, donc je pourrais faire ça à la place.

$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";

et maintenant j'ai ce que je veux une jolie chaîne csv

 'lastname','email','phone'

Y a-t-il une meilleure façon de faire cela ? J'ai l'impression qu'il devrait y avoir un paramètre optionnel pour implode, ai-je manqué quelque chose ?

13 votes

Je vois beaucoup de commentaires sur le fait que les réponses fournies sont "plus lentes". Cela n'a pas d'importance . Choisissez la voie qui est la plus claire et la plus facile à maintenir, préoccupez-vous des performances plus tard, voire pas du tout.

3 votes

Le seul inconvénient est qu'il produira une chaîne vide si le tableau est vide, ce qui équivaut à $comma_separated = "''";

1 votes

Excellente solution mcgrailm... j'apprécie vraiment.

200voto

Umesh Moghariya Points 764
$array = array('lastname', 'email', 'phone');

echo "'" . implode("','", $array) . "'";

0 votes

Simple aussi rapide que possible

0 votes

Cela fait l'affaire pour moi

6 votes

Faites attention aux tableaux vides lorsque vous utilisez cette solution.

46voto

Felix Kling Points 247451

Vous pourriez utiliser array_map() :

function add_quotes($str) {
    return sprintf("'%s'", $str);
}

$csv =  implode(',', array_map('add_quotes', $array));

DEMO

Notez également qu'il y a fputcsv si vous voulez écrire dans un fichier.

0 votes

@Felix Kling Je pense que cela serait également plus lent ?

1 votes

@mcgrailm, je vous le redemande : plus lent que quoi ?

3 votes

@mcgrailm : Peut-être, je vous propose de faire un benchmark et de le découvrir ;).

30voto

Rafe Kettler Points 29389

Non, la façon dont vous le faites est très bien. implode() ne prend que 1 ou 2 paramètres (si vous ne fournissez qu'un tableau, il joint les morceaux par une chaîne vide).

0 votes

Il semble qu'il n'y ait pas de différence de vitesse dans toutes ces solutions. Je vais continuer à faire comme je l'ai toujours fait, merci pour l'aide de tous.

24voto

Je ne sais pas si c'est plus rapide, mais vous pourriez économiser une ligne de code avec votre méthode :

De

$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";

A :

$array = array('lastname', 'email', 'phone');
$comma_separated = "'".implode("','", $array)."'";

2 votes

Et je pourrais aller plus loin en mettant la définition du tableau dans la dernière ligne où se trouve la variable $array mais la différence de vitesse serait minime

10voto

Neal Points 68710

Si vous voulez utiliser des boucles, vous pouvez également le faire :

$array = array('lastname', 'email', 'phone');
foreach($array as &$value){
   $value = "'$value'";
}
$comma_separated = implode(",", $array);

Démonstration : http://codepad.org/O2kB4fRo

1 votes

@mcgrailm, plus lent que quoi ? C'est fondamentalement la même chose qu'un array_map mais sans utiliser array_map

0 votes

Plus lente que la façon dont je crée actuellement ma chaîne csv

0 votes

@mcgrailm voir le commentaire de @FelixKling

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X