PHP 5.2.5 - foreach by reference bug?

dr-sm

Новичок
PHP 5.2.5 - foreach by reference bug?

нижеприведенный код, у меня работает неверно, с моей точки зрения.
скажите я что-то неправильно делаю или это баг все-таки.
если баг, то куда писать?

PHP:
function dump($obj) {
	echo '<pre>';
	print_r($obj);
	echo '</pre>';
} 

// Step 0 
$tags = array(
	'hookers' => 1,
	'blackjack' => 2,
	'what' => 0,
	'the' => 0,
	'fxxx' => 0,
	'is' => 0,
	'going' => 0,
	'on' => 0
);
dump($tags);

// Step 1
$last = 2;
// если заменить код на закомментированый то все ок
// foreach ($tags as $val => $id) {
foreach ($tags as $val => &$id) {
	if ($id != 0) {
		continue;
	}
	$id = ++$last;
	// $tags[$val] = ++$last;
}
dump($tags);

// Step 3
$str = '';
// после этого цикла массив $tags изменяется!!!
foreach ($tags as $id) {
	$str .= $id . ',';
}
dump($tags);
dump($str);
....
Array
(
[hookers] => 1
[blackjack] => 2
[what] => 3
[the] => 4
[fxxx] => 5
[is] => 6
[going] => 7
[on] => 7 - !!!
)
1,2,3,4,5,6,7,7,

PS извините за тупое название предыдущего топика ).
 

zerkms

TDD infected
Команда форума
всё работает правильно
никакого бага нет
что ты написал - то и получил

hint: выкинь свою функцию dump() и сделай вывод результатов через var_dump() и будет тебе причина твоей "ошибки"
 

dr-sm

Новичок
ох, спасибо, ато всю голову поломал, ужасающая засада :D
 

Sluggard

Новичок
:)
а если так?
PHP:
foreach ($tags as $idd) {
    $str .= $idd . ',';
}
-~{}~ 04.03.08 17:07:

или так (чтобы было понятнее)?
PHP:
foreach ($tags as &$id) {
    $str .= $id . ',';
}
 

zerkms

TDD infected
Команда форума
Sluggard
есть жуткие подозрения, что человеку всё стало понятно ещё вчера...
 

dr-sm

Новичок
да понятно конечно все теперь, меня чета переклинило :D.
это поведение даже в документации описано.
в данном случае логично было бы делать unset($id) автоматически, при выходе из цикла,
но тогда изменица семантика ссылок.
 
Сверху