phparraysmultidimensional-arraydelimitedkeypaths

Convert delimited string into array key path and assign value


I have a string like this:

$string = 'one/two/three/four';

which I turn it into a array:

$keys = explode('/', $string);

This array can have any number of elements, like 1, 2, 5 etc.

How can I assign a certain value to a multidimensional array, but use the $keys I created above to identify the position where to insert?

Like:

$arr['one']['two']['three']['four'] = 'value';

Sorry if the question is confusing, but I don't know how to explain it better


Solution

  • This is kind of non-trivial because you want to nest, but it should go something like:

    function insert_using_keys($arr, $keys, $value){
        // we're modifying a copy of $arr, but here
        // we obtain a reference to it. we move the
        // reference in order to set the values.
        $a = &$arr;
    
        while( count($keys) > 0 ){
            // get next first key
            $k = array_shift($keys);
    
            // if $a isn't an array already, make it one
            if(!is_array($a)){
                $a = array();
            }
    
            // move the reference deeper
            $a = &$a[$k];
        }
        $a = $value;
    
        // return a copy of $arr with the value set
        return $arr;
    }