PHP foreach/reference oddities
October 27, 2010
I encountered this weirdness today with some basic PHP:
Early in the script I had: (note the reference &$nid
)
// validate foreach($nids as $key => &$nid) { if (empty($nid)) unset($nids[$key]); if (! is_numeric($nid)) unset($nids[$key]); $nid = (int) $nid; } print_r($nids);
Outputs:
Array ( [0] => 81 [1] => 1199 )
Then later on…
foreach($nids as $nid) { echo $nid; }
Outputs:
81 81
If I change the 2nd loop to:
foreach($nids as &$nid) { echo $nid; }
then it outputs 81 and 1199 like it should.
Shouldn’t as $nid
reset the variable so it’s no longer a reference?