IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

modifier le contenu d'un array multidimensionnel [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut modifier le contenu d'un array multidimensionnel
    Bonjour,

    Ma question me semble d'une stupidité déconcertante mais pas moyen de me débloquer le cerveau!

    Je parcours des flux XML, et pous chaque flux je récupère son nom et la quantité qu'il contient.
    A chaque fois que je tombe sur un nom déjà présent dans le tableau, je souhaite "fusionner" les contenus, donc en gros calculer le total des quantités regroupées, et incrémenter le nombre d'occurences de 1.
    Sinon, j'ajoute une ligne dans mon tableau... (cette partie fonctionne donc je ne vais pas vous embêter avec!)

    Je construit donc un tableau comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $t_references = array
                     (
                          "$v_nom_flux" => array
                                          (
                                               "nb_occurences" => $v_occurences,
                                               "nb_total_docs" => $v_total_documents  
                                          )
                     );
    Voici le script que j'ai pondu, et qui donc ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $v_index = key($t_references);
    while($v_nom_flux = current($t_references)){
      if(strcasecmp($v_index, $v_nom_court_flux) == 0){                         
        $v_occurences = $v_occurences + 1;
        $v_total_documents = $v_total_documents + $v_nb_docs;
        echo "Présent dans le tableau <br/>";
        echo "Vérification : $v_occurences - $v_total_documents <br/>";
      //modifier un flux de données dans le tableau LE PROBLEME
        $t_references_remplace["nb_occurences"]=$v_occurences;
        $t_references_remplace["nb_total_docs"]=$v_total_documents;    echo "<br/> Modification d'une entrée : <br/>";
        var_dump($t_references);
        break;
      }else{
    J'ai également essayé ceci... (le résultat que je vous affiche plus loin provient de ce script
    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
     
    $v_index = key($t_references);
    while($v_nom_flux = current($t_references)){
      if(strcasecmp($v_index, $v_nom_court_flux) == 0){                         
        $v_occurences = $v_occurences + 1;
        $v_total_documents = $v_total_documents + $v_nb_docs;
        echo "Présent dans le tableau <br/>";
        echo "Vérification : $v_occurences - $v_total_documents <br/>";
      //modifier un flux de données dans le tableau LE PROBLEME
        $v_modification = &$t_references["$v_nom_flux"];
        $v_modification["nb_occurences"]=$v_occurences;
        $v_modification["nb_total_docs"]=$v_total_documents;
        $t_references["$v_nom_flux"]=$v_modification;
        var_dump($t_references);
        break;
      }else{
    Je parcours 3 flux, dont 2 qui portent le même nom et voici le résultat de mes mouchards (désolé pour le pâté d'autant plus que c'est très moyennement lisible...)
    nom : fichier_type1_00001
    nombre : 4997
    nom court : fichier_type1
    Ajout de la première entrée: //c'est effectivement la première entrée dans le tableau
    array(1) { ["fichier_type1
    "]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } }

    nom : fichier_type1_00002
    nombre : 5000
    nom court : fichier_type1
    Présent dans le tableau
    Vérification : 2 - 5000 //Ca devrait être 2 - 9997
    array(2) { ["fichier_type1"]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } ["Array"]=> &array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> int(5000) } }


    nom : fichier_type2_00001
    nombre : 1786
    nom court : fichier_type2
    Pas présent dans le tableau
    Pas présent dans le tableau
    Ajout d'une nouvelle entrée dans le tableau :
    array(3) { ["fichier_type1"]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } ["Array"]=> &array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> int(5000) } [""]=> array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> object(SimpleXMLElement)#97 (1) { [0]=> string(4) "1786" } } }

    nom : fichier_type3_00001
    nombre : 4984
    nom court : fichier_type3
    Ajout de la première entrée: //?????
    array(4) { ["fichier_type1"]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } ["Array"]=> &array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> int(5000) } [""]=> array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> object(SimpleXMLElement)#97 (1) { [0]=> string(4) "1786" } } ["fichier_type3"]=> array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> object(SimpleXMLElement)#1 (1) { [0]=> string(4) "4984" } } }
    Je peux ainsi constater que ma somme ne se fait pas ...
    De plus fichier_type2 n'apparait pas dans les clé du tableau... bizarre!
    Le premier script donnait comme résultat (je ne vous met que la fin, à partir du dernier flux):
    nom : fichier_type3_00001
    nombre : 4984
    nom court : fichier_type3
    Ajout de la première entrée:
    array(3) { ["fichier_type1"]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } [""]=> array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> object(SimpleXMLElement)#97 (1) { [0]=> string(4) "1786" } } ["fichier_type3"]=> array(2) { ["nb_occurences"]=> int(2) ["nb_total_docs"]=> object(SimpleXMLElement)#1 (1) { [0]=> string(4) "4984" } } }
    Bref, je ne m'en sort pas trop, si quelqu'un avait une petite idée ou un lien vers un tuto qui parle de ça! Merci bien!

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    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 : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pourquoi un break?

    edit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for( $tableau as $key => $value )
    ça serait pas plus simple?

    Ma question me semble d'une stupidité déconcertante mais pas moyen de me débloquer le cerveau!
    mais non !

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    Break parce qu'une fois que l'information a été trouvé dans le tableau, je veux passer au parcours du fichier suivant... Je ne sais pas si c'est plus simple mais ça fonctionne! =)

    Sinon mon code a un peu évolué depuis tout à l'heure
    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
     
    while($v_nom_flux = current($t_references)){
      if(strcasecmp($v_index, $v_nom_court_flux) == 0){                         
        $v_occurences = $v_occurences + 1;
        $v_total_documents = $v_total_documents + $v_nb_docs;
        echo "Présent dans le tableau <br/>";
        echo "Vérification : $v_occurences - $v_total_documents <br/>";
     
    //modifier un flux de données dans le tableau
        $t_references["$v_nom_flux"]["nb_occurences"] = $v_occurences;
        $t_references["$v_nom_flux"]["nb_total_docs"] = $v_total_documents;
     
        echo "<br/> Modification d'une entrée : <br/>";
        var_dump($t_references);
        break;
      }else{
    J'essaye de remplacer les valeurs correspondant aux clés "nb_occurences" et "nb_total_docs" mais voici ce qui s'affiche...
    fichier_type1_00002
    nombre : 5000
    nom court : fichier_type1
    Présent dans le tableau
    Vérification : 2 - 9997
    array(2) { ["fichier_type1"]=> array(2) { ["nb_occurences"]=> int(1) ["nb_total_docs"]=> object(SimpleXMLElement)#93 (1) { [0]=> string(4) "4997" } } ["Array"]=> array(2) { ["nb_total_docs"]=> int(9997) ["nb_occurences"]=> int(2) } }
    C'est la deuxième partie qui m'intéresse, mais je ne comprends pas pourquoi elle s'affiche à la suite! Pourquoi ça ne remplace pas les données?

  4. #4
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    J'ai trouvé la solution, si ça peut servir à quelqu'un...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //modifier un flux de données dans le tableau
    $v_modification = array
                              (
                                 "nb_occurences" => $v_occurences,
                                 "nb_total_docs" => $v_total_documents
                               );
    $t_references[key($t_references)] = $v_modification;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier la valeur contenue dans un array
    Par Yakka dans le forum Caml
    Réponses: 4
    Dernier message: 07/11/2011, 18h03
  2. [vb excel]Probleme affichage de contenu d'une array
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/09/2005, 16h01
  3. modifier le contenu de ma base
    Par dolphi dans le forum ASP
    Réponses: 2
    Dernier message: 22/08/2005, 17h17
  4. Réponses: 20
    Dernier message: 01/06/2005, 09h37
  5. modifier le contenu d'une table avec innerHTML
    Par francon81 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/05/2005, 09h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo