Edit report at https://bugs.php.net/bug.php?id=60067&edit=1
ID: 60067 Comment by: bigorangemachine at hotmail dot com Reported by: bigorangemachine at hotmail dot com Summary: Strange Recursive/interation Status: Open Type: Bug Package: Variables related Operating System: Linux CGI/FastCGI PHP Version: 5.3.8 Block user comment: N Private report: N New Comment: FROM (corrected): if(@in_array($k,$exclude_keys,true)){ if($_type=='object'){ if(!basic_check($omit_str)){unset($obj->{$k});} else{$obj->{$k}=$omit_str;} }else if($_type=='array'){ if(!basic_check($omit_str)){unset($obj[$k]);} else{$obj[$k]=$omit_str;} } }else{ if(gettype($v)=='object' && ($v instanceof Traversable)){// log_clean($obj->{$k},$exclude_keys,$omit_str);} else if(gettype($v)=='array'){ log_clean($obj[$k],$exclude_keys,$omit_str);} } TO (shortened): if(@in_array($k,$exclude_keys,true)){ if(!basic_check($omit_str)){unset($v);} else{$v=$omit_str;} }else{ log_clean($v,$exclude_keys,$omit_str); } I changed using $obj[$k] ( and $obj->{$k} [sorry for the syntax error]) to just using $v in the function log_clean(). This is my first bug report. Sorry if I don't have the format correct. Previous Comments: ------------------------------------------------------------------------ [2011-10-16 01:15:57] anonymous at anonymous dot anonymous Needs an SSCCE: http://sscce.org/ ------------------------------------------------------------------------ [2011-10-15 19:39:27] bigorangemachine at hotmail dot com Description: ------------ I wrote an OOP PHP class to interact with an Shipping estimate API. I setup a logging system to help log & track any issues during testing. The goal was to have this logging system remove certain index keys for both 'objects' and 'arrays' in a recursive manor. I believe that the passed-reference (variable using with an ampersand or what I call a 'live link') is being 'pushed' up. When I check the logged xml (in the example) it often read 'omitted'. The variable was being changed even though the original call to function wasn't done using a passed-reference. The function would work correctly with the corrected code or the log_xml calls completed first. Maybe using $v is what broke the pass reference and it was just a 'copy' after that. Test script: --------------- Code Sample Here http://pastebin.com/GcZMkD6B ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=60067&edit=1