将数组值从单个维度数组转换为另一个数组的深度

So lets say I have the following array:

$value = 'x';

$foo = Array(
  0 => 'arraydepth1',
  1 => 'arraydepth2',
  2 => 'arraydepth3',
  3 => 'arraydepth4'
)

I need the values to be the keys, in order/depth, of the following array:

$bar['arraydepth1']['arraydepth2']['arraydepth3']['arraydepth4'] = 'x';

Wrap you head around this:

function nest(Array $a, $lastValue) {
    $out = [];
    $ref =& $out;
    foreach ($a as $b) {
        $ref[$b] = [];
        $ref =& $ref[$b];
    }
    $ref = $lastValue;
    return $out;
}
var_dump(nest($foo, $value));

It is a little convoluted to explain, but here is my attempt:

  • The $out variable is just an array that is going to be returned at the end of the function.

  • $ref is a reference to the most recently nested array.

  • In the loop we keep adding an array to the reference and then setting the reference to the added array.