『階層的なキーの連想配列化』投稿

どう書く?.org』への投稿ひさびさ。

お題はこちら。 今回は与えられたテーブルを元に階層的な連送配列を作りなさいというもの。

配列を&で渡しているのがポイント。

$tokyo = array(  
  array(‘東京都’, ‘区部’, ‘千代田区’, ‘object1’)  
  ,array(‘東京都’, ‘区部’, ‘中央区’, ‘object2’)  
  ,array(‘東京都’, ‘区部’, ‘港区’, ‘object3’)  
  ,array(‘東京都’, ‘多摩地域’, ‘支部’, ‘昭島市’, ‘object4’)  
  ,array(‘東京都’, ‘多摩地域’, ‘支部’, ‘あきる野市’, ‘object5’)  
  ,array(‘東京都’, ‘多摩地域’, ‘西多摩郡’, ‘奥多摩町’, ‘object6’)  
  ,array(‘東京都’, ‘島嶼部’, ‘大島支庁’, ‘大島町’, ‘object7’)  
  ,array(‘東京都’, ‘島嶼部’, ‘三宅支庁’, ‘三宅村’, ‘object8’)  
);  
  
$tokyo_tree = array();  
  
foreach ( $tokyo as $obs ) {  
  $w = &$tokyo_tree;  
  $cnt = count( $obs );  
  for ( $i = 0; $i < $cnt; $i++ ) {  
    if ( $i == $cnt-1 ) {  
      $w = $obs[$i];  
    } else {  
      $w = &$w[$obs[$i]];  
    }  
  }  
}  
print_r( $tokyo_tree );

結果はこんなかんじ。

Array ( [東京都] => Array  
(  
  [区部] => Array  
  (  
    [千代田区] => object1  
    [中央区] => object2  
    [港区] => object3  
  )  
  [多摩地域] => Array  
  (  
    [支部] => Array  
    (  
      [昭島市] => object4  
      [あきる野市] => object5  
    )  
    [西多摩郡] => Array  
    (  
      [奥多摩町] => object6  
    )  
  )  
  [島嶼部] => Array  
  (  
    [大島支庁] => Array  
    (  
      [大島町] => object7  
    )  
    [三宅支庁] => Array  
    (  
      [三宅村] => object8  
    )  
  )  
)

投稿:

http://ja.doukaku.org/comment/10876/