Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/03/2011, 15h19   #1
Invité de passage
 
Inscription : octobre 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 16
Points : 3
Points : 3
Par défaut php et fichier csv fusionner/grouper des lignes

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
Code :
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);
?>
Voilà l'affichage obtenu :
Code :
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>
Parfait me direz-vous !! Sauf que j'aimerais obtenir :
Code :
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>
Donc pour résumer, je souhaiterais fusionner/grouper les lignes avec un nom et un prénom identique

J'ai fais des tests avec array_unique, mais rien donc je me tourne vers vous.

Merci par avance
venus02 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 15h28   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Hello

Utilise DOM Document pour générer ton flux XML. Tu crées les nodes <personne> et tu gardes les références dans une tables avec pour clé le couple nom-prénon. Lors d'une itération, tu détectes si le couple nom-prénom est déjà présent et si tel est le cas, plutôt que de générer un nouveau node <personne>, tu utilise celui qui existe déjà.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h30.


 
 
 
 
Partenaires

Hébergement Web