Bonjour à tous,
Désolé par avance si je n'ai pas posté au bon endroit
Je dois manipuler un fichier csv pour le transformer en fichier XML.
Fichier d'entrée :
nom;prenom;email
dupont;marc;dupont@dupont.fr
dupont;marc;dupont@gmail.com
martin;rene;rene@gmail.com
mon fichier php
Voilà l'affichage obtenu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 <?php $fichier = 'test3.csv'; $sortie = 'test3.xml'; $contenu = fopen($fichier, 'r'); $ecriture = fopen($sortie, 'w'); $entete = fgetcsv($contenu, 1024, ";", '"'); $debut = '<fichier>' . "\n"; fwrite($ecriture, $debut); while (($tab = fgetcsv($contenu, 1024, ";", '"')) !== FALSE) { fwrite($ecriture, "\t" . '<personne>' . "\n"); foreach ($tab as $cle => $valeur) { fwrite($ecriture, "\t\t" . '<' . $entete[$cle] . '>' . $valeur . '</' . $entete[$cle] . '>' . "\n"); } fwrite($ecriture, "\t" . '</personne>' . "\n"); } $fin = '</fichier>' . "\n"; fwrite($ecriture, $fin); fclose($contenu); fclose($ecriture); ?>
Parfait me direz-vous !! Sauf que j'aimerais obtenir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <fichier> <personne> <nom>dupont</nom> <prenom>marc</prenom> <email>dupont@dupont.fr</email> </personne> <personne> <nom>dupont</nom> <prenom>marc</prenom> <email>dupont@gmail.com</email> </personne> <personne> <nom>martin</nom> <prenom>rene</prenom> <email>rene@gmail.com</email> </personne> </fichier>
Donc pour résumer, je souhaiterais fusionner/grouper les lignes avec un nom et un prénom identique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <fichier> <personne> <nom>dupont</nom> <prenom>marc</prenom> <email>dupont@dupont.fr</email> <email>dupont@gmail.com</email> </personne> <personne> <nom>martin</nom> <prenom>rene</prenom> <email>rene@gmail.com</email> </personne> </fichier>
J'ai fais des tests avec array_unique, mais rien donc je me tourne vers vous.
Merci par avance
Partager