ID: 42236 Updated by: [EMAIL PROTECTED] Reported By: remy215 at laposte dot net -Status: Open +Status: Feedback Bug Type: Arrays related Operating System: debian PHP Version: 5.2CVS-2007-08-12 New Comment:
Now I just want one thing cleared: Did you experience this with earlier PHP versions than 5.2.3? As I'm quite sure it has been like this always. And using global when not really necessary is always bad.. Previous Comments: ------------------------------------------------------------------------ [2007-08-15 23:31:55] remy215 at laposte dot net I know that foreach reset the array. In fact I am not looking for a workaround, I already have one. It's just that the behavior of php looks quite unexpected to me and it could be a bug. Normally, calling << getParent('a0'); >> or calling << getParent('a0',$array); >> should lead exactly to the same result since when the second argument is not provided, it defaults to $array. But that's not the case, the first call leads to an infinite loop while the second delivers the expected result (null). I hope I am not wrong. In any case, thanks for your help. Regards, Remy ------------------------------------------------------------------------ [2007-08-15 15:46:41] [EMAIL PROTECTED] Try replace the foreach() calls with while/each struct...foreach() does a reset on the array.. ------------------------------------------------------------------------ [2007-08-15 12:47:01] remy215 at laposte dot net Hi Jani, First thank you for your support. Here is a cleaner version (without the infinite-loop checking): <?php $array=array( 'a0'=>array( 'a1'=>array( 'a2'=>array(), 'b2'=>array() ),'b1'=>array() ),'b0'=>array() ); function getParent($id,$_subtree=null) { $found_parent=null; if(!$_subtree) { global $array; $_subtree=$array; } foreach($_subtree as $parent=>$children) { if(in_array($id,array_keys($children))) { $found_parent=$parent; break; } elseif($found_parent=getParent($id,$children)) { break; } } return $found_parent; } echo "\nparent of b2 is: ".getParent('b2'); // expected result: 'a1' -- actual result: 'a1' echo "\nparent of a0 is: ".getParent('a0'); // expected result: null -- actual result: infinite loop ?> What's really strange is that if you call getParent('a0',$array), it works perfectly ! it's the [global $array; $_subtree=$array;] used for initialization that triggers an infinite loop. Regards, Remy ------------------------------------------------------------------------ [2007-08-15 08:44:39] [EMAIL PROTECTED] Please provide the simplest possible script that shows exactly what is going wrong. The current example is too complex and seems to contain all kinds of useless workarounds.. ------------------------------------------------------------------------ [2007-08-12 21:36:09] remy215 at laposte dot net I tested with latest cvs snapshot, still unexpectingly reseting the array, leading to an unpredictable infinite loop. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/42236 -- Edit this bug report at http://bugs.php.net/?id=42236&edit=1