- 自分の id
- 親の id(親がいなければ 0)
- 自分の値
を持った配列を一つの塊としたときに、複数の塊が並んでいるような二次元配列があるとします。(以下のような形)
<?php
$data = [
[
'id' => 1,
'parent_id' => 0,
'value' => '親1',
],
[
'id' => 2,
'parent_id' => 0,
'value' => '親2',
],
[
'id' => 3,
'parent_id' => 1,
'value' => '子1-1',
],
[
'id' => 4,
'parent_id' => 1,
'value' => '子1-2',
],
[
'id' => 5,
'parent_id' => 2,
'value' => '子2-1',
],
];
この形式の配列を入力したときに、HTML の <ul>
<li>
タグを使って階層的なリストを表示する機能を実装してください。
出力する HTML コード
<ul>
<li>親1
<ul>
<li>子1-1</li>
<li>子1-2</li>
</ul>
</li>
<li>親2
<ul>
<li>子2-1</li>
</ul>
</li>
</ul>
表示結果
- 階層の深さは、親と子の 2 階層しかないものとしてよい
- 入力される配列の構造エラーなどは考慮しなくてよい
- id 順で並んでいる必要は特にない
初級編ができた人は、さらに以下のような改良を加えてみてください。
再帰処理を用いて、無限に深い階層を処理できるよう改良してみてください。
例えば以下のような入力に対応できれば十分でしょう。
入力例
<?php
$data = [
[
'id' => 1,
'parent_id' => 0,
'value' => '親1',
],
[
'id' => 2,
'parent_id' => 0,
'value' => '親2',
],
[
'id' => 3,
'parent_id' => 1,
'value' => '子1-1',
],
[
'id' => 4,
'parent_id' => 1,
'value' => '子1-2',
],
[
'id' => 5,
'parent_id' => 2,
'value' => '子2-1',
],
[
'id' => 6,
'parent_id' => 4,
'value' => '孫1-2-1',
],
[
'id' => 7,
'parent_id' => 3,
'value' => '孫1-1-1',
],
[
'id' => 8,
'parent_id' => 7,
'value' => 'ひ孫1-1-1-1',
],
[
'id' => 9,
'parent_id' => 5,
'value' => '孫2-1-1',
],
[
'id' => 10,
'parent_id' => 5,
'value' => '孫2-1-2',
],
[
'id' => 11,
'parent_id' => 2,
'value' => '子2-2',
],
[
'id' => 12,
'parent_id' => 4,
'value' => '孫1-2-2',
],
[
'id' => 13,
'parent_id' => 9,
'value' => 'ひ孫2-1-1-1',
],
[
'id' => 14,
'parent_id' => 5,
'value' => '孫2-1-3',
],
[
'id' => 15,
'parent_id' => 2,
'value' => '子2-3',
],
];
表示結果
CLI から実行した場合には HTML ではなく改行とインデントを使って表示されるように改良してみてください。
例えば以下のような形式で出力できればよいでしょう。
CLI 出力例
* 親1
* 子1-1
* 孫1-1-1
* ひ孫1-1-1-1
* 子1-2
* 孫1-2-1
* 孫1-2-2
* 親2
* 子2-1
* 孫2-1-1
* ひ孫2-1-1-1
* 孫2-1-2
* 孫2-1-3
* 子2-2
* 子2-3
時間内に応用編まで終わった人は、ぜひ周りの人たちに教えてあげてください!