2011-10-25 19 views
0

私は親IDを持つMySQLのカテゴリのリストを持っています。リストからPHP配列を作成するにはどうすればいいですか?私は実際のところ、この構造体の配列リストから多次元配列を作成する方法は?

array(
    "Car" => "1", 
    "Education" => array("Mathematics" => "2", "Physics" => array("Astrophysics" => "4")) 
); 

を生成したい

ID Category  Parent_ID 
1 Car   NULL 
2 Education  NULL 
3 Mathematics 2 
4 Physics  2 
5 Astrophysics 4 

、キー/値が、私はあまりにも他の列で動作するように重要ではありません。私はちょうどリストをスキャンし、複数レベルのリストを生成する方法を知りたいです。

+2

配列にはどのようなキーがありますか?あなたの配列をどのように見せたいですか?あなたはassocをしたいですか?アレイ?または各行をオブジェクトとして保存したいのですか? – DarthVader

+0

サンプル配列を質問に追加しました:) – Googlebot

答えて

5

ツリー構造構築するためのいくつかの非常に単純な再帰:

function buildTree(array $data, $parent = null) { 
    $branch = array(); 

    foreach ($data as $row) { 
     if ($row['parent_id'] == $parent) { 
      $row['children'] = buildTree($data, $row['id']); 
      $branch[] = $row; 
     } 
    } 

    return $branch; 
} 

$tree = buildTree($rowsFromDatabase); 

明示'children'キーを持つあなたが提案している構造に通常好ましいが、必要に応じて変更して自由に感じます。

+0

'$ parent = null'は' $ parent = ""にする必要があります。 "mysqlはnull値に対して空の文字列を返します。それ以外+1。 – Louis

+0

@Louisあなたは正しいです。私たちはゆるやかにしか比較していないので、それでも正しく動作します。 :) – deceze

+1

@deceze [ワンループ](http://stackoverflow.com/a/11240578/697154)のみでこれを行うことができ、n * nループは不要です。 ;) – Yoshi

関連する問題