<?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);