Вы должны использовать array_reduce .
Решение довольно простое.
Чтобы сделать трюк, разверните массив и только затем примените сокращение.
$a = array('a','b','c');
$x = array_reduce(array_reverse($a), function ($r, $c) {
return array($c=>$r);
},array());
РЕДАКТИРОВАТЬ расширенная и поясненная версия:
В php у нас нет функции, позволяющей автоматически углубляться в массив, но мы этого не делаем.
Если вы начнете снизу, мы сможем заключить массив в предыдущий
с простым заданием.
$a = array('a','b','c');
$result=array(); // initially the accumulator is empty
$result = array_reduce(
array_reverse($a),
function ($partialResult, $currentElement) {
/* enclose the partially computed result into a key of a new array */
$partialResult = array($currentElement=>$partialResult);
return $partialResult;
},
$result
);
Кстати, я предпочитаю более короткую форму. Я думаю, что это функциональная идиома и не требует дальнейшего объяснения для среднего опытного разработчика (с небольшим количеством функционального фона). Второй добавляет много шума, что, это удобно учиться, но источник
отвлечения в производственный код (, очевидно, я имею в виду функцию только с оператором возврата ).