[ create a new paste ] login | about

Link: http://codepad.org/rnZPdWGG    [ raw code | output | fork ]

PHP, pasted on Nov 22:
<?php

$array = array('tea'      => array('drink' => array('food' => null)),
               'biscuits' => array('snack' => array('food' => null)),
               'coke'     => array('drink' => array('food' => null)),
               'ford'     => array('truck' => array('car'  => null)));

function flatten(array $array) {
   $key = array(key($array));
   $val = current($array);
   if (is_array($val)) {
       $key = array_merge(flatten($val), $key);
   }
   return $key;
}

function build(array $path, array $result) {
   $key = array_shift($path);
   if (!isset($result[$key])) {
       $result[$key] = $path ? array() : null;
   }
   if ($path) {
       $result[$key] = build($path, $result[$key]);
   }
   return $result;
}

$result = array();
foreach ($array as $key => $value) {
   $result = build(flatten(array($key => $value)), $result);
}

print_r($result);


Output:
Array
(
    [food] => Array
        (
            [drink] => Array
                (
                    [tea] => 
                    [coke] => 
                )

            [snack] => Array
                (
                    [biscuits] => 
                )

        )

    [car] => Array
        (
            [truck] => Array
                (
                    [ford] => 
                )

        )

)


Create a new paste based on this one


Comments: