Here is the solution, very simple, but yet, still very confusing sometimes.
$arr = array('level_1', 'level_2', 'level_3');
function fetch(array $array){
$numberOfDimensions = count($array);
// the value of array['level_1']['level_2']['level_3']
$value = "something";
for($i = $numberOfDimensions-1; $i >= 0; $i--){
$value = array($array[$i] => $value);
}
return $value;
}
print_r(fetch($arr));
Output:
Array ( [level_1] => Array ( [level_2] => Array ( [level_3] => something )))
As you can see, the solution is very simple, but to understand what is going on, you must understand how array works.
Every array has index, or hash when talking about associative arrays, and for each of those keys there is only exactly one value. The value can be of any type, so if we add an array as value of another array's element, you get 2-dimensional array. If you add 2-dimensional array as value of another arrays's element, you get 3-dimensional array. By repeating the process, you get N-dimensional array.
The algorithm works by going from the deepest key (the last element inside keys array) and assigning a new associative array to the $value variable, which is the value prepared to be set as array value of dimension above, all until the end of loop.
Lets have a look at the changes made to variable $value inside for loop, before and after change.
The initial value of variable $value is "something". "something" is value of array level_3, and so on...
So, running
print_r(array['level_1']['level_2']['level_3']);
will produce
something
Here is a full state view of the $value variable inside for loop:
Key: level_3
something
Array ( [level_3] => something )
Key: level_2
Array ( [level_3] => something )
Array ( [level_2] => Array ( [level_3] => something ) )
Key: level_1
Array ( [level_2] => Array ( [level_3] => something ) )
Array ( [level_1] => Array ( [level_2] => Array ( [level_3] => something ) ) )