Informatix le gaulois

Tutoriels et outils pour l'informatique.

Informatix > Tutoriels > PHP > Implode / Explode : Du tableau à la chaine de caractères, de la chaine de caractères au tableau

Implode / Explode : Du tableau à la chaine de caractères, de la chaine de caractères au tableau

Comment concaténer les valeurs d'un tableau (array) en une seule ligne grâce à la fonction implode.

dimanche 09 janvier 2011 à 20:16

Un problème assez courant en programmation est de vouloir concaténer toutes les valeurs contenues dans un tableau en une chaine de caractères, séparées par un séparateur comme une virgule.

Par exemple j'ai un fichier avec une liste de personnes pour qui je dois récupérer des informations dans une base de données. On a besoin de construire une requête du type :

CODE

SELECT
    u.age
FROM
    utilisateurs u
WHERE
    u.nom IN ('Bill', 'Steve', 'John', 'Mark')

Beaucoup partiraient sur une solution qui consiste à concaténer, à chaque tour de boucle, la nouvelle ligne à une chaine de caractères (que j'appellerai maintenant string car c'est plus court à écrire ).

Un truc dans ce style :

CODE

$chaine = "'";
//Ouverture du fichier en mode lecture
$ressource = fopen($nom_fichier, 'r');

while (!feof($ressource))
{
    // Tant que le fichier n'est pas au bout, on concatène les lignes.
    $chaine .= fgets($ressource) . "', '";
}
fclose($ressource); // Fermeture du fichier
$chaine .= "'";

Résultat : 'Bill', 'Steve', 'John', 'Mark', '

Déjà ça ne marche pas car il y a une virgule en trop à la fin ! Il faudrait retraiter la string pour l'enlever, ce n'est pas trop grave pour cet exemple mais le séparateur peut être totalement autre chose qu'une virgule ce qui peut rendre la chose difficile dans certains cas.

Une autre solution que je préfère consiste à mettre les noms dans un tableau et à utiliser la fonction implode de PHP .

CODE

$tab = array();
$ressource = fopen($nom_fichier, 'r'); //Ouverture du fichier en mode lecture
while (!feof($ressource))
{
    // Tant que le fichier n'est pas au bout, on stocke les lignes dans un tableau. 
    $tab[] = fgets($ressource);
}
fclose($ressource); // Fermeture du fichier
$chaine .= "'" . implode("', '", $tab) . "'"; // Implosion du tableau et concaténation

/**********************************************************
** AUTRE SOLUTION POUR DE PETITS FICHIERS < 10MO
**********************************************************/

$tab = array();
$tab = file($nom_fichier); // Lecture du fichier et explosion par ligne
$chaine .= "'" . implode("', '", $tab) . "'"; // Implosion du tableau et concaténation

Résultat : 'Bill', 'Steve', 'John', 'Mark'

Voilà qui est mieux !

La fonction inverse de implode s'appelle explode. Elle permet d'exploser une string sur un séparateur et retourne un tableau.

Par exemple : explode(" <hr/> ", "Ligne 1 <hr/> Ligne 2") retourne array("Ligne 1", "Ligne 2").

Nicolas GAUTRON

Auteur

Nicolas GAUTRON
Créateur et administrateur.
http://www.informatix.fr



^ Haut de page ^



Dans la même catégorie

Une version mobile de mon site avec le Zend Framework
Doctrine et le Zend Framework : Présentation, intégration et utilisation
Créer son flux RSS simplement avec Zend_Feed
Un client HTTP / proxy en PHP
Appliquer un layout sur un mail avec le Zend Framework
Activer PHP5 sur un hébergement 1&1
Comment lancer une requête multi-bases avec les fonctions MySQL ?


Commentaire(s)



^ Haut de page | Commentaires ^