Modifier array dans un foreach en PHP

Résolu/Fermé
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
- Modifié par mariostar27 le 8/06/2011 à 17:28
 lemilas - 13 févr. 2013 à 13:20
Bonjour,
voici mon problème. j'ai un array de forme :

array 
  93 =>  
    array 
      'ID' => string '93' (length=2) 
      'CODE' => string 'CFH' (length=3) 
      'ANNEESCOLAIRE' => string '2010' (length=4) 
      'UNITE' => string 'Heure' (length=5) 
      'LIBELE' => string 'Cours Formation Humaine' (length=23) 
      'VISIBLE' => string '0' (length=1) 
      'SAISISSABLE' => int 1 
  11 =>  
    array 
      'ID' => string '11' (length=2) 
      'CODE' => string 'CL' (length=2) 
      'ANNEESCOLAIRE' => string '2010' (length=4) 
      'UNITE' => string 'Heure' (length=5) 
      'LIBELE' => string 'Cours de langue' (length=15) 
      'VISIBLE' => string '0' (length=1) 
      'SAISISSABLE' => int 1 


J'aimerai modifier se tableau dans une boucle foreach. le soucis, c'est que rien ne change. voici ce que j'obtiens :

foreach ($A_tableauNatureActivite as $key => $nature){ 
        $nature['SAISISSABLE'] = 0; 
        echo $nature['CODE']." = ".$nature['SAISISSABLE']."<br/>"; 
} 

echo "### MAINTENANT ###<br/>";

foreach ($A_tableauNatureActivite as $key => $nature){ 
        echo $nature['CODE']." = ".$nature['SAISISSABLE']."<br/>"; 
} 


j'obtiens le résultat suivant :

CFH = 0 
CL = 0 
### MAINTENANT ### 
CFH = 1 
CL = 1 


Pourquoi les valeurs n'ont t-elle pas été changé dans la seconde boucle foreach ???
merci d'avance pour votre aide.



gwennael

4 réponses

Bonsoir

Pas d'accord avec mpmp93

Si ça ne marche pas, c'est parce que tu modifies la variable $nature, qui est une copie d'un élément du tableau, mais pas le tableau lui même.

foreach ($A_tableauNatureActivite as $key => $nature){ 
        $A_tableauNatureActivite[$key]['SAISISSABLE'] = 0; // ça, ça modifie bien le tableau
} 

Note que depuis PHP5 si tu l'as, tu peux aussi modifier le tableau à travers la variable $nature à condition de l'avoir passée par référence ( note le & devant $nature dans le foreach)
foreach ($A_tableauNatureActivite as $key => &$nature){ 
        $nature['SAISISSABLE'] = 0; // ça aussi, ça modifie bien le tableau en PHP5
} 
6
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
26
9 juin 2011 à 09:46
Merci beaucoup ^^. Sujet RESOLU
1
mpmp93
Messages postés
6651
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 324
Modifié par mpmp93 le 8/06/2011 à 22:18
Bonsoir,

Le problème est que vous avez des tableaux dans un tableau.

array  
  93 =>   
    array  
      'ID' => string '93' (length=2)  
      'CODE' =>
....etc....

Code qui irait bien:

foreach ($A_tableauNatureActivite as $key => $val){  
        foreach($val AS $key2 => $nature) 
               $nature['SAISISSABLE'] = 0;  
               echo $nature['CODE']." = ".$nature['SAISISSABLE']."<br/>";  
         } 
}  


ai pas testé, mais c'est ce que je verrai bien...

Sinon:

foreach ($A_tableauNatureActivite as $key => $nature){  
               $nature[$key]['SAISISSABLE'] = 0;  
               echo $nature['CODE']." = ".$nature['SAISISSABLE']."<br/>";  
}  


A+
0
Merci beaucoup vraiment ca fait trois jours que je cherche cet solution,Merci Pour la deuxième fois .
0