一次元配列→多次元配列への変換

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)
     }
    }
   }
  }
 }
}

カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です