From:             [EMAIL PROTECTED]
Operating system: All
PHP version:      4.1.2
PHP Bug Type:     Feature/Change Request
Bug description:  array_recurse_safe()

Will solve problems like:

http://bugs.php.net/bug.php?id=16064

This code doesn't work, but I don't know enough C to write it right.  It
would work if PHP had a method for determining if two variables are the
same reference. (unless there is one that I haven't found...)

<?php
$a=array(1,2,3);
$a[3]=&$a;
$a=array_recurse_safe($a);
array_merge_recursive($a,$a);
var_dump($a);

function array_recurse_safe($array, $parents=array()) {
    $parents[]=&$array;
    foreach($array as $element) {
        if(is_array($element) || is_object($element)) {
            $loop=false;
            foreach($parents as $parent) {
                if(&$parent == &$element) {
                    unset($element);
                    $loop=true;
                }
            }
            if(!$loop) {
                $element=array_recurse_safe($element, $parents);
            }
        }
    }
    return $array;
}
?>

Also, the usage of unset() is improper here, but I left it in for
simplicity.
-- 
Edit bug report at http://bugs.php.net/?id=17279&edit=1
-- 
Fixed in CVS:        http://bugs.php.net/fix.php?id=17279&r=fixedcvs
Fixed in release:    http://bugs.php.net/fix.php?id=17279&r=alreadyfixed
Need backtrace:      http://bugs.php.net/fix.php?id=17279&r=needtrace
Try newer version:   http://bugs.php.net/fix.php?id=17279&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=17279&r=support
Expected behavior:   http://bugs.php.net/fix.php?id=17279&r=notwrong
Not enough info:     http://bugs.php.net/fix.php?id=17279&r=notenoughinfo
Submitted twice:     http://bugs.php.net/fix.php?id=17279&r=submittedtwice
register_globals:    http://bugs.php.net/fix.php?id=17279&r=globals

Reply via email to