Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Recursively left trim a specific character from keys

I can't quite work this out...

I was hoping that there would be a default PHP function to do this, but it seems there isn't. The code I've found online seems to not really work for my situation, since often people have only need to the modify array values and not their keys.

I basically need a recursive function that replaces every key that starts with a '_' with the same key without that symbol....

Has anybody here used something similar before?

like image 730
olive Avatar asked Sep 27 '10 23:09

olive


1 Answers

Try this:

function replaceKeys(array $input) {

    $return = array();
    foreach ($input as $key => $value) {
        if (strpos($key, '_') === 0)
            $key = substr($key, 1);

        if (is_array($value))
            $value = replaceKeys($value); 

        $return[$key] = $value;
    }
    return $return;
}

So this code:

$arr = array('_name' => 'John', 
             'ages'  => array(
                  '_first' => 10, 
                  'last'   => 15));

print_r(replaceKeys($arr));

Will produce (as seen on codepad):

Array
(
    [name] => John
    [ages] => Array
        (
            [first] => 10
            [last] => 15
        )

)
like image 140
NullUserException Avatar answered Dec 28 '22 19:12

NullUserException