( Read more... )
rn<?phprn$a = array('a', 'b', 'c');rnforeach ($a as &$e) {};rnforeach ($a as $e) {rn echo ' ' . $e;rn};rn?>rnrnЕсли вы думаете, что "a b c", вынужден вас огорчить, будет - "a b b" =)rnПричину этого можно проследить на следующем примере:rnrn<?phprn$a = array('a', 'b', 'c', 'd', 'e');rnforeach ($a as &$e) {};rnforeach ($a as $e) {rn echo $e;rn print_r($a);rn};rn?>rnКак видите - после первого цикла в переменной $e осталась ссылка на последний элемент массива $a, поэтому во время второго цикла по адресу $e записываются элементы массива $a, а в последнец итерации там остается предпоследний элемент..rnХотел уже на радостях постить баг, но оказалось это богус еще с 5.0.1rnЧтобы избавиться от этой проблемы достаточно сделать unset($e) после первого цикла.<?phprn$i = 5;rn$i = ++$i + ++$i;rnecho $i; // 13rn?>rnrnJS:rnvar i = 5;rni = ++i + ++i;rnalert(i); // 13rnrnMySQL:rnrnmysql> set @i = 5;rnQuery OK, 0 rows affected (0.00 sec)rnrnmysql> select @i := ++@i +++@i;rn+------------------+rn| @i := ++@i +++@i |rn+------------------+rn| 10 |rn+------------------+rn1 row in set (0.00 sec)You are viewing
_irokez's journal