array(‘a’, ‘b’, ‘c’, ‘d’)のような1次元配列をarray(‘a’=>array(‘b’=>array(‘c’=>array(‘d’))))のような多次元配列に変換するにはどのようなアルゴリズムを用いればよいだろうか?
おそらくこれを実現するのは、ポインタを使わざるを得ないだろうということで以下のようなコードを実装してみた。
function _makeTreeStructure($arr_level, $value){
$arr_data = array();
$p = &$arr_data;
for ($i = 0; $i < count($arr_level); $i++){ $p = array($arr_level[$i] =>
($i == count($arr_level) – 1) ? $value : ”);
$p = &$p[$arr_level[$i]];
}
return $arr_data;
}
実行コード
var_dump(makeTreeStructure(array(‘a’, ‘b’, ‘d’, ‘a’, ‘b’, ‘d’), 3));
結果は以下の通り
array(1) {
[“a”]=>
array(1) {
[“b”]=>
&array(1) {
[“d”]=>
&array(1) {
[“a”]=>
&array(1) {
[“b”]=>
&array(1) {
[“d”]=>
int(3)
}
}
}
}
}
}