Re: Array references - how to unset() ?

From: Date: Thu, 03 Sep 2009 00:40:03 +0000
Subject: Re: Array references - how to unset() ?
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-297617@lists.php.net to get a copy of this message
Martin Zvarík wrote:
Robert Cummings napsal(a):
Martin Zvarík wrote:
$ARR = array( 'a' => array('b' => 'blah') ); function set($key) {
    global $ARR;
    foreach ($key as $i => $k) {
         if ($i == 0) {
                $sourcevar =& $ARR[$k];
            } else {
                $sourcevar =& $sourcevar[$k];
            }
        }
     // unset($sourcevar); // will cancel the reference - we want to unset the ['b'], but how?
$sourcevar = null; // will set it NULL, but won't unset... foreach ($ARR ... // I could run a cleanup, that would go through all of the array and unset what is NULL, but I would need to use REFERENCES again!! array_walk_recursive() is also worthless... any ideas? } set( array('a', 'b') );
unset( $ARR[$k] ) Cheers, Rob.
Thanks for reply, but I want to: unset($ARR['a']['b']) Imagine I have this: $KEYS = array('a', 'b', 'c'); And I want to: unset($ARR['a']['b']['c'])
This is possible. You're just not giving enough consideration to your exit strategy :) <?php function unset_deep( &$array, $keys ) {
    $final = array_pop( $keys );
    foreach( $keys as $key )
    {
        $array = &$array[$key];
    }
    unset( $array[$final] );
} $value = array (
    'a' => array
    (
        'b' => array
        (
            'c' => 'C',
            'd' => 'D',
            'e' => 'E'
        ),
    ),
); $keys = array('a', 'b', 'c'); unset_deep( $value, $keys ); print_r( $value ); ?> Cheers, Rob. -- http://www.interjinn.com Application and Templating Framework for PHP

« previous php.general (#297617) next »