phparraysmultidimensional-array

Convert an array of strings, each string has dot separated values, to a multidimensional array


I have the following array:

Array
(
    [0] => INBOX.Trash
    [1] => INBOX.Sent
    [2] => INBOX.Drafts
    [3] => INBOX.Test.sub folder
    [4] => INBOX.Test.sub folder.test 2
)

How can I convert this array to a multidimensional array like this:

Array
(
    [Inbox] => Array
        (
            [Trash] => Array
                (
                )

            [Sent] => Array
                (
                )

            [Drafts] => Array
                (
                )

            [Test] => Array
                (
                    [sub folder] => Array
                        (
                            [test 2] => Array
                                (
                                )

                        )

                )

        )

)

Solution

  • This code uses a function from this answer to do what you're looking for.

    <?php
    $test = Array
    (
        0 => 'INBOX.Trash',
        1 => 'INBOX.Sent',
        2 => 'INBOX.Drafts',
        3 => 'INBOX.Test.sub folder',
        4 => 'INBOX.Test.sub folder.test 2',
    );
    
    $output = array();
    foreach($test as $element){
        assignArrayByPath($output, $element);   
    }
    debug($output);
    
    function assignArrayByPath(&$arr, $path) {
        $keys = explode('.', $path);
        
        while ($key = array_shift($keys)) {
            $arr = &$arr[$key];
        }
    }
    
    function debug($arr){
        echo "<pre>";
        print_r($arr);
        echo "</pre>";
    }