Несколько раз попадался на одну и ту же проблему, причём на разных версиях php. Если поставить подряд два цикла foreach вот таким образом: Код (PHP): foreach ($users as &$u) { /* some code */ } foreach ($users as $u) { /* some code */ } то второй цикл будет работать неверно. Если или в первом или во втором цикле поменять $u на другое имя переменной, то всё будет ОК. Может кто-нибудь объяснить, с чем это связано?
так он же говорит что второй цикл работает не правильно, интересно в чем не правильность и какой код выполняется за место some code, хотя бы примерно, в качестве примера.
В доке об этом сказано. Надо делать так: Код (PHP): foreach ($users as &$u) { /* some code */ } $u = null; foreach ($users as $u) { /* some code */ }
$u - ссылка на последний элемент массива. Глянь: http://sandbox.onlinephpfunctions.com/code/aa2f87b135180904 ... 892876f59b
к сожалению в РНР невозможно создавать локальные переменные как допустим в С++, например: Код (PHP): int j = 100; { int z = 200; } // за скобками z уже не существует, а j есть // в смысле в любом месте кода вот так вот можно вставить скобки и писать в них локальный код // и переменные за скобками уже не будут сещствовать по этому после вызова цикла Код (PHP): foreach ($users as $u) { /* some code */ } у тебя теперь существует переменная $u, за пределами цикла. а если ты пишешь &$u то это уже ссылки и дальше начинается беда. Добавлено спустя 44 секунды: Я просто думал что какая то другая проблема, более сложная, такая что я даже ее не могу понять, а тут такая мелочь
на моей памяти обсуждалось неоднократно. например: viewtopic.php?t=45403 Добавлено спустя 1 минуту 9 секунд: И в офф. справке упоминается. http://php.net/manual/ru/control-structures.foreach
При этом переменная все равно продолжает существовать, хоть и пустая. В документации предлагают делать unset($u). Чтоб наверняка.