多次元配列をテーブルのネスト構造で表現したいと考えており、 表現したい結果のテーブルは例えば以下の通りです。
1階層目 | 2階層目 | 3階層目 |
---|---|---|
Category1 | ||
Category1-1 | ||
Category1_3_1 | ||
Category1_3_2 | ||
Category1_3_3 |
これを出力するために、以下のようなコーディングをいたしました。
php
1$index_array=[ 2 ["Category1", 3 ["Category1_1",["Category1_1_1","Category1_1_2","Category1_1_3"], 4 "Category1_2",["Category1_2_1","Category1_2_2"], 5 "Category1_3",["Category1_3_1","Category1_3_2","Category1_3_3"] 6 ] 7 ], 8 ["Category2", 9 ["Category2_1",["Category2_1_1","Category2_1_2","Category2_1_3"], 10 "Category2_2",["Category2_2_1","Category2_2_2"], 11 "Category2_3",["Category2_3_1","Category2_3_2","Category2_3_3"] 12 ] 13 ], 14 ["Category3", 15 ["Category3_1",["Category3_1_1","Category3_1_2","Category3_1_3"], 16 "Category3_2",["Category3_2_1","Category3_2_2"], 17 ] 18 ], 19] 20 21 <table> 22 <tbody> 23 <?php 24 $index_table=""; 25 for ($i=0; $i <count($index_array) ; $i++) { 26 $index_table.="<tr><td>".$index_array[$i][0]."</td><td></td><td></td></tr>"; 27 if (!(is_null($index_array[$i][1]))) { 28 for ($j=0; $j <count($index_array[$i][1]) ; $j++) { 29 $index_table.="<tr><td></td><td>".$index_array[$i][1][$j]."</td><td></td></tr>"; 30 if (!(is_null($index_array[$i][1][$j][1]))) { 31 for ($k=0; $k <count($index_array[$i][1][$j][1]) ; $k++) { 32 $index_table.="<tr><td></td><td></td><td>".$index_array[$i][1][$j][1][$k]."</td></tr>"; 33 } 34 } 35 } 36 } 37 } 38 echo $index_table; 39 ?> 40 </tbody> 41 </table>
その結果、以下の通り、3階層目について、文字列をcountして出力しているように思えます。
html
1 2Category1 3Category1_1 4a 5Array 6C 7a 8t 9Category1_2 10a 11Array 12C 13a 14Category1_3 15a 16Array 17C 18a 19t 20Category2 21Category2_1 22a 23Array 24C 25a 26t 27Category2_2 28a 29Array 30C 31a 32Category2_3 33a 34Array 35C 36a 37t 38Category3 39Category3_1 40a 41Array 42C 43a 44t 45Category3_2 46a 47Array 48C 49a
どこのコーディングにミスがあるか分からず、ご助言いただければ幸いです。
また、このようなネスト構造をforとifの組み合わせで構築していくのは非常に可読性が低く他に良い方法がないかを検討していおります。配列自体が所与である場合、ここからより良い方法で目的とする構造を出力する良いアイデアは考えられるでしょうか?
よろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー