ID: 41372 Updated by: [EMAIL PROTECTED] Reported By: forjest at gmail dot com -Status: Open +Status: Assigned Bug Type: Arrays related Operating System: WinXP, Linux PHP Version: 5.2.1, 4.4.7 -Assigned To: +Assigned To: dmitry New Comment:
Dmitry, check this out too, along with all those other reports about same issue.. :) Previous Comments: ------------------------------------------------------------------------ [2007-05-16 13:44:46] forjest at gmail dot com I'm described problem, that is not foreach related. Just 1. Straight copy from one global scope variable to another 2. Copy from current runing context to global variable. Not iterating local varibale after copying element of global array. This is another bug, but may be from same "family". And please remember another one http://bugs.php.net/bug.php?id=37715 Problem appeared at 4.4.2 and 5.1.2 and was reported year ago... May be I'm described duplicate of "This is expected and not going to be changed" bug instead of assigned 'foreach' bug? ------------------------------------------------------------------------ [2007-05-16 13:01:18] [EMAIL PROTECTED] Duplicate of bug #40509. ------------------------------------------------------------------------ [2007-05-12 10:10:17] forjest at gmail dot com /*for simple case just wrap array in some array function. That will cause small overhead, but at least save your internal pointer*/ $Foo = array('val1', 'val2', 'val3'); end($Foo); var_dump(key($Foo)); $AllOkay = array_merge($Foo); var_dump(key($Foo)); ---------- /*But to make immune running context for error handler function nothing helps, except ugly serialize/unserialize solution*/ error_reporting(E_ALL); function TestErrorHandler($severity, $message, $filename, $line, $super_globals) { global $foo; $foo = unserialize(serialize($super_globals)); } class Test { function run() { $Res = array('val1', 'val2', 'val3'); end($Res); var_dump(key($Res)); HEY;//raise notice error var_dump(key($Res)); } } $test = new Test(); set_error_handler('TestErrorHandler'); $test-> run(); ------------------------------------------------------------------------ [2007-05-12 08:32:17] forjest at gmail dot com Description: ------------ Bug first appeared in 4.4.2. Version 4.4.1 works okay. 5.1.4, 5.2.1 has this bug too. ----- Seems algorithm of array copying was changed at 4.4.2 and 5.1.2 versions. ----- This behavior cause problems in unexpected situations such as error handling functions, when array pointer reseted due copying from another array which reference to it. Reproduce code: --------------- $Foo = array('val1', 'val2', 'val3'); end($Foo); var_dump(key($Foo)); $MagicInternalPointerResetter = $Foo; var_dump(key($Foo)); -- Code describing unexpected results of this behavior listed here: http://www.pastebin.ru/10226 Expected result: ---------------- int(2) int(2) Actual result: -------------- int(2) int(0) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=41372&edit=1