phparraysmultidimensional-arraydelimitedkeypaths

Convert flat array of delimited key path strings to a multidimensional array with each path terminating at an empty array


I would like to convert these strings into a combined nested array:

array(
    'item1:item2:itemx',
    'item1:item2:itemy',
    'itemz'
)

To

array(
    'item1' => array(
        'item2' => array(
            'itemx' => array(),
            'itemy' => array(),
        )
    )
    'itemz' => array()
)

Is there a way to do this with explode/foreach loop?


Solution

  • This question has been answered countless of times... please use search before posting a new question.

    Anyway, here's one solution:

    $strings = array(
                     'item1:item2:itemx',
                     'item1:item2:itemy',
                     'itemz'
                    );
    
    $nested_array = array();
    
    foreach($strings as $item) {
        $temp = &$nested_array;
    
        foreach(explode(':', $item) as $key) {
            $temp = &$temp[$key];
        }
    
        $temp = array();
    }
    
    var_dump($nested_array);