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
);
ちなみに私は短い方が好きです。これは機能的な慣用句であり、中程度の経験を積んだ開発者 (機能的なバックグラウンドが少しある) にはこれ以上説明する必要はないと思います。2番目のものは多くのノイズを追加します。学習には適していますが、本番コードへの注意散漫の原因になります(明らかに、 return ステートメントだけで関数を参照しています)。