$a = array(1,2,3,4,5,6);
foreach ($a as &$b) {
 $b *=2;
}

foreach ($a as $b) {
 echo $b . '<br>';
}


output
2
4
6
8
10
10

verwacht
2
4
6
8
10
12

Waarom heb ik 2X 10 en niet 10 en 12
Doe ik iets fout of is dit een bug

Jan
Jan R op 30/10/2019 09:18:49


Volgens mij is het sowieso een bug.

Lees het gelinkte topic naar Tweakers eens? ;-)
ik verwacht dat duidelijk wordt wat er gebeurt, als je in de 2e loop ook steeds $a dumpt:

<?php

$a = array(1,2,3,4,5,6);
foreach ($a as &$b) {
$b *=2;
}

foreach ($a as $b) {
echo $b . PHP_EOL;
var_dump($a);
}
?>

je krijgt dan

2
array(6) {
  [0]=>
  int(2)
  [1]=>
  int(4)
  [2]=>
  int(6)
  [3]=>
  int(8)
  [4]=>
  int(10)
  [5]=>
  &int(2)
}
4
array(6) {
  [0]=>
  int(2)
  [1]=>
  int(4)
  [2]=>
  int(6)
  [3]=>
  int(8)
  [4]=>
  int(10)
  [5]=>
  &int(4)
}

etc

je ziet dat het laatste element steeds vervangen wordt door de nieuwe waarde die in $b geplaatst wordt.
Zie ook de & voor int.

[size=xsmall]Toevoeging op 31/10/2019 14:11:03:[/size]

conclusie: vermijd by-reference als het niet per se nodig is.

Reageren