« もといた勤務先が吸収される | メイン | Zend Japanが提唱するコード標準 »

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

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

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



トラックバック

トラックバックは本サイトの紹介(リンクがあれば可)があるものに限り受付いたします。このエントリーのトラックバックURLは以下のとおりです。

http://blog.development-network.net/mt/mt-tb.cgi/101

コメントを投稿