Comportement des tableaux ???

ViPHP
ViPHP | 1961 Messages

04 févr. 2007, 22:48

Bonjour,

Je fais une petite révision sur les tableaux et je tombe sur QQ chose de bizarre.

Avec ce code
$a = Array('zero', 'un', 'deux');
  foreach($a as &$v) {
  }
  foreach($a as $v) {
  }
  echo '<pre>';
  print_r($a);
  echo '</pre>';
J'obtiens ceci

Code : Tout sélectionner

Array ( [0] => zero [1] => un [2] => un )
Avez-vous une explication pour ce résultat ?
D'avance merci!
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 19672 Messages

04 févr. 2007, 23:22

Je note deux choses :
- Tu fais deux boucles sans instruction;
- La première boucle contient un passage par référence qui n'a pas lieu d'être en PHP5

Ensuite, tu fais un print_r() sur ton tableau et l'affichage est tout ce qu'il y a de plus normal... donc au final, je saisis mal la question, tu t'attendais à quoi ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 1961 Messages

04 févr. 2007, 23:26

Slt Cyrano,

Je m'attendais à avoir

Code : Tout sélectionner

Array ( [0] => zero [1] => un [2] => deux ET NON PAS un )
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 19672 Messages

04 févr. 2007, 23:31

Ha oui tiens.... j'avais pas relevé ce détail : essaye dont ton print_r() avant les boucles, je soupçonne le passage par référence de mettre la zone :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 1961 Messages

04 févr. 2007, 23:39

Re,

Finalement c'est logique,
Si on réfléchit comme en C ==> référence == pointeur == adresse

Dans la première boucle rien n'est modifié mais à la fin, $v pointe vers adresse de $a[2].

Dans la seconde boucle $v, donc $a[2], se voit attribuer successivement 'zero', 'un' et au dernier passage comme il contient déjà 'un' il "réattribut" 'un'.

C'est un piège à c*ns!
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein