Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1736 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [SimpleXML] Modification du contenu

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SimpleXML] Modification du contenu

n°2066980
nisalon_ca​je
Posté le 29-03-2011 à 21:15:46  profilanswer
 

Bonjour
 
Je suis en train de faire un microsystème de gestion de proxy
Voici un extrait du code

Code :
  1. $pxml = simplexml_load_file( "proxys.xml" );
  2. $proxys_tmp = array();
  3. for ($i = 0; $i < $pxml->proxy->count(); $i++) {
  4.         $proxys_tmp[$i] = $pxml->proxy[$i];
  5. }
  6. // Calculs me permettant de modifier les données de  $proxys_tmp
  7. for ($i = 0; $i < $pxml->proxy->count(); $i++) {
  8.         $pxml->proxy[$i] = $proxys_tmp[$i];
  9.         echo  $pxml->proxy[$i]['ip'].' - '.$proxys_tmp[$i]['ip'].'<br/>';
  10.     }


 
Etrangement, les lignes qui apparaissent comportent deux ips différentes ...
 
Pourriez-vous m'expliquer le problème et m'aider à le résoudre ?
 
NC

mood
Publicité
Posté le 29-03-2011 à 21:15:46  profilanswer
 

n°2067118
the_bigboo
Posté le 30-03-2011 à 17:14:15  profilanswer
 

Salut,
 
Tu pourrais montrer la structure de ton XML ? Histoire de pouvoir reproduire ton problème ?

n°2067137
nisalon_ca​je
Posté le 30-03-2011 à 17:47:35  profilanswer
 

Voila un code source permettant de reproduire l'erreur
 

Code :
  1. <?php
  2. $data = '<?xml version="1.0"?>
  3. <proxys nb="3">
  4.     <proxy ip="1.2.3.4" data="abc"></proxy>
  5.     <proxy ip="5.6.7.8" data="def"></proxy>
  6.     <proxy ip="9.10.11.12" data="ghi"></proxy>
  7. </proxys>
  8. ';
  9. $pxml = simplexml_load_string($data);
  10. $proxys_tmp = array();
  11. for ($i = 0; $i < $pxml->proxy->count(); $i++) {
  12.     $proxys_tmp[$i] = $pxml->proxy[$i];
  13. }
  14. $clefs = array();
  15. for ($i = 0; $i < $pxml->proxy->count(); $i++) {
  16.     $clefs[$i] = rand();
  17. }
  18. array_multisort($clefs, SORT_DESC, $proxys_tmp);
  19. for ($i = 0; $i < $pxml->proxy->count(); $i++) {
  20.     $pxml->proxy[$i] = $proxys_tmp[$i];
  21.     echo $pxml->proxy[$i]['ip'] . ' - ' . $proxys_tmp[$i]['ip'] . '<br/>';
  22. }
  23. ?>


Message édité par nisalon_caje le 30-03-2011 à 17:48:23

---------------
http://nisalon.labrute.com/
n°2067146
the_bigboo
Posté le 30-03-2011 à 17:58:25  profilanswer
 

Voici ce que je fais en reprenant ton xml, et qui fonctionne très bien :

Code :
  1. $pxml = simplexml_load_string($data);
  2. $proxys_tmp = array();
  3. foreach ($pxml->proxy as $k => $p){
  4. $proxys_tmp[] = $p->attributes();
  5. }
  6. for ($i = 0; $i < $pxml->proxy->count(); $i++) {
  7. $pxml->proxy[$i] = $proxys_tmp[$i];
  8. echo $pxml->proxy[$i]['ip'] . ' - ' . $proxys_tmp[$i]['ip'] . '<br/>';
  9. }


Il semblerait que ce soit ton array_multisort qui casse tout... Surtout si tu le bases sur un random...
Pour rappel, ca agit par référence sur ta variable $proxys_tmp...


Message édité par the_bigboo le 30-03-2011 à 17:58:57
n°2067163
nisalon_ca​je
Posté le 30-03-2011 à 20:21:20  profilanswer
 

A vrai dire il y a deux choses que je n'ai pas compris :  
- J'ai mis le random pour mettre une valeur aléatoire pour le tri, j'aurais aussi bien pu mettre le résultat d'un calcul basé sur data
- je n'ai pas compris de plus en quoi le fait que l'on agisse par référence sur $proxys_tmp changeait quelque chose
- dans votre exemple, il n'y a pas d'array multisort, il rend effectivement le même résultat, mais rien n'a été changé :p (et en réintroduisant l'array multisort, je n'ai pas le résultat escompté) :(


---------------
http://nisalon.labrute.com/
n°2067174
the_bigboo
Posté le 30-03-2011 à 21:16:03  profilanswer
 

En fait, d'après ton post, j'avais compris que tu voulais avoir les mêmes valeurs. Pourrais tu m'expliquer ce que tu cherches à faire ? Et me donner le résultat que tu cherches à obtenir à partix du XML d'exemple ?

n°2067179
nisalon_ca​je
Posté le 30-03-2011 à 21:53:07  profilanswer
 

pas de soucis
Je cherche juste à classer mes proxys selon les valeurs qui sont dans $clefs, de manière décroissante. (là j'ai mis une valeur aléatoire, afin que l'on puisse tester, dans le cas réel ca fait appel à une fonction relativement compliquée)

 

ainsi, mon array multisort trie bien $proxys_tmp, mais c'est lors de la recopie que les choses se passent mal : alors que le echo de la ligne 10 devrait afficher 2 fois la même valeur (puisque la recopie de la valeur est en ligne 9), la recopie ne s'effectue pas


Message édité par nisalon_caje le 30-03-2011 à 22:05:05

---------------
http://nisalon.labrute.com/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [SimpleXML] Modification du contenu

 

Sujets relatifs
[C#] Enregistrer contenu textbox dans un fichier[Résolu] Changer le contenu d'une page html
Afficher/supprimer le contenu d'une bdd en fonction d'un id précis[Android] Afficer le contenu d'un tableau
afficher le contenu d'une var d'envModification calendrier
[sh] écoute d'un port réseau et analyse du contenu récupéréComment appliquer un style de police à du texte contenu dans scriptphp
Requete de modificationModification, insertion, suppression, dans un tableau deux dimensions
Plus de sujets relatifs à : [SimpleXML] Modification du contenu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR