業務委託契約に関して親子関係にある配列をネスト(入れ子)してリスト表示する2015-06-28社員リストやサイトマップなど、データベースにバラバラに登録されているデータを部署ごとに並べ替えかつ、親子関係になるよう多重連想配列にしたいケースが有ります。サンプルsqlのみだとlpadでスペースを入れて表現する方法であったり、WEB上でデザインするにはちょっと微妙な方法しか無いようです。サンプルはSqliteで作った簡単なスタッフリストです。VALUES(11,NULL,1,'鈴木一郎');parentは親となる列のidをインサートします。一応sortも含める事で表示順序をソートしています。}結果をループし、自分のIDをキーとした配列に組み替えます。}parentに数値があれば、そのIDの配下にchildrenというキーで格納していきます。この段階で階層構造で配列化されます。}↑※Cryonはどうもタグを消したり微妙なのでクリックしてソース見て下さい。関数nestを呼び出し、children(子配列)がある場合は親の下にULをセットしながら再帰します。リスト化出来てしまえば、後はCSSレベルでデザインするだけ。SQLでループ、ネストする為にループ、リスト化する為にまたループ、とあまりスマートでは有りません。array_walkを使ってどうにかシンプルに纏められないかと考えましたが、良い方法が見つかりませんでした。ループ処理が多いので、大量のデータ処理だと遅くなるかもしれませんが、300人程度の社員リストを処理しても殆ど一瞬でした。そもそもこの手のリストを作る際に、数千なんてレベルのデータを処理する事はあまり無いでしょうし、問題無いかと。変化の無いデータであれば、キャッシュしてしまえば良いですし。