Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
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 17/11/2010, 17h12   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2010
Messages : 78
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 78
Points : 13
Points : 13
Par défaut suppression des doublons

Bonjour, après quelques recherches sans résultat, je me permets de poster pour savoir s'il existe une solution pour supprimer les doublons avec simplexml.

Voici la partie de mon code concernée:
C'est '$fluxXmlPistes->piste' qui contient des doublons.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$xml.='<SECTEUR nom="pistes">';
 
foreach($fluxXmlPistes->piste as $pistes)
{
 
	$pistes->etat = str_replace('ferme', 'F', $pistes->etat);
	$pistes->etat = str_replace('ouvert', 'O', $pistes->etat);
	$xml.='<PISTE nom="'.$pistes->nom.'" etat="'.$pistes->etat.'" type="" niveau="" msg="" entretien_txt="" entretien_num=""/>';
}
 
$xml.='</SECTEUR>';
Merci à ceux qui sauront m'éclairer
flo73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 18h18   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 814
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 814
Points : 3 436
Points : 3 436
Si une piste est identifiée par son nom :

Code :
1
2
3
4
5
6
7
8
9
10
$pistes = array( ) ;
foreach($fluxXmlPistes->piste as $piste)
{
    if ( ! in_array($piste->nom, $pistes) ) {
	$piste->etat = str_replace('ferme', 'F', $piste->etat);
	$piste->etat = str_replace('ouvert', 'O', $piste->etat);
	$xml.='<PISTE nom="'.$piste->nom.'" etat="'.$piste->etat.'" type="" niveau="" msg="" entretien_txt="" entretien_num=""/>';
        $pistes[ ] = $piste->nom ;
    }
}
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/11/2010, 20h43   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2010
Messages : 78
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 78
Points : 13
Points : 13
Merci pour la réponse qui me semble tout à fait opérationnelle.....Sauf dans la pratique, j'ai toujours mes doublons....

Je ne sais pas pourquoi....

Merci
flo73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 21h22   #4
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
dans ce cas tu fais un tableau dans lequel tu ajoutes à toutes les itérations et ensuite tu fais un array_unique(). Les puristes diront que c'est moins performant mais c'est tellement plus simple à rédiger.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 23h06   #5
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 814
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 814
Points : 3 436
Points : 3 436
Citation:
Envoyé par flo73 Voir le message
Merci pour la réponse qui me semble tout à fait opérationnelle.....Sauf dans la pratique, j'ai toujours mes doublons....

Je ne sais pas pourquoi....
Pour illustrer le bug donne-nous un petit script fonctionnel et un XML valide pour test ;-)
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 15h49   #6
Candidat au titre de Membre du Club
 
Inscription : juillet 2010
Messages : 78
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 78
Points : 13
Points : 13
Merci pour vos réponses.

Seb, ta solution était effectivement la bonne.....La subtilité résidait dans le fait qu'un espace était ajouté sur certains noms en double:

Donc
Code :
1
2
3
4
5
6
7
8
9
10
11
 
pistes = array( ) ;
foreach($fluxXmlPistes->piste as $piste)
{
    if ( ! in_array(trim($piste->nom), $pistes) ) {
	$piste->etat = str_replace('ferme', 'F', $piste->etat);
	$piste->etat = str_replace('ouvert', 'O', $piste->etat);
	$xml.='<PISTE nom="'.$piste->nom.'" etat="'.$piste->etat.'" type="" niveau="" msg="" entretien_txt="" entretien_num=""/>';
        $pistes[ ] = trim($piste->nom) ;
    }
}
Merci
flo73 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h01.


 
 
 
 
Partenaires

Hébergement Web