PHPの便利な小技 PHPで使える便利な小技などのご紹介

親子関係にある配列をネスト(入れ子)してリスト表示する

2015年6月28日
この記事は掲載から1303日経過しています。
情報が古い可能性が有りますのでご了承下さい

社員リストやサイトマップなど、データベースにバラバラに登録されているデータを部署ごとに並べ替えかつ、親子関係になるよう多重連想配列にしたいケースが有ります。

サンプル

sqlのみだとlpadでスペースを入れて表現する方法であったり、WEB上でデザインするにはちょっと微妙な方法しか無いようです。

サンプルはSqliteで作った簡単なスタッフリストです。

parentは親となる列のidをインサートします。一応sortも含める事で表示順序をソートしています。後は名前。

 データを呼び出す

結果をループし、自分のIDをキーとした配列に組み替えます。

親子構造の配列にする

parentに数値があれば、そのIDの配下にchildrenというキーで格納していきます。

この段階で階層構造で配列化されます。

配列をLIでリスト化する

↑※Cryonはどうもタグを消したり微妙なのでクリックしてソース見て下さい。

関数nestを呼び出し、children(子配列)がある場合は親の下にULをセットしながら再帰します。

リスト化出来てしまえば、後はCSSレベルでデザインするだけ。

但し、SQLでループ、ネストする為にループ、リスト化する為にまたループ、とあまりスマートでは有りません。

array_walkを使ってどうにかシンプルに纏められないかと考えましたが、良い方法が見つかりませんでした。ループ処理が多いので、大量のデータ処理だと遅くなるかもしれませんが、300人程度の社員リストを処理しても殆ど一瞬でした。そもそもこの手のリストを作る際に、数千なんてレベルのデータを処理する事はあまり無いでしょうし、問題無いかと。

そうそう変化の無いデータであれば、キャッシュしてしまえば良いですし。

 

 
  • このエントリーをはてなブックマークに追加
  • LINEで送る

PAGE TOP