私は次のようなDBを持っています:
id text parent
1 Parent 1 0
2 Child of 1 1
3 Sibling 1
4 Another Parent 0
5 A first child 4
そのため、親をリストするツリー構造をキャプチャしようとしています。私は他のオプション (入れ子になったセットだと思いますか?) を認識していますが、今のところこれに固執するつもりです。私は今、DB からデータを取得して、PHP のネストされた配列構造に入れようとしています。私はこのような機能を持っています:
class Data_Manager
{
public $connection = '';
public $collection = array();
function __construct() {
$this->connection = mysql_connect('localhost', 'root', 'root');
$thisTable = mysql_select_db('data');
// error handling truncated
}
function get_all() {
$arr = &$this->collection;
$this->recurseTree('', 0, $arr);
var_dump($arr);
}
function recurseTree($parent, $level, $arrayNode) {
$result = mysql_query('SELECT * FROM tasks WHERE parent="' . $parent . '";');
while ($row = mysql_fetch_array($result)) {
$row['children'] = array(); //where I'd like to put the kids
$arrayNode[$row['id']]= $row;
$this->recurseTree($row['id'], $level+1, $arrayNode[$row['id']]);
}
}
}
だから、連想配列のネストされたツリーのようなものを作りたいと思っていますが、それを行う方法がわかりません。渡した配列に何も書き込まれていないようで、再帰で自分自身を見失っています。次のような結果になるこの最後のこぶを乗り越えるのを手伝ってくれる人はいますか?
[
Parent1 => [
children => ['Child of 1', 'Sibling']
],
AnotherParent => [
children => ['First Child']
]
]
また、出力の特定の形式にはあまり関心がありません。これは JSON に変換されますが、クライアント側のハンドラーの作成についてはまだ扱っていないため、正確な構造については心配する必要はありません。
ありがとう!