PHPでバイナリツリーを構築しています。これまでのところすべてが順調に見えますが、今問題が発生しています。右側に配置したノードは、左側に右側のノードを配置すると左側に表示されます。左のノードを最初に配置し、右のノードをその後に配置すると、システムが見栄えがします。json形式のphp配列の構造は次のとおりです。
[{"id":"158","parent_id":"157","side":"right","username":"okamikid1"},{"id":"160","parent_id":"157","side":"left","username":"okamikid2"}]
以下の関数を使用して階層ビューにしています。
function tree($elements) {
foreach ($elements as $row) {
$row['children'] = array();
$vn = "row" . $row['id'];
${$vn} = $row;
if(!is_null($row['parent_id'])) {
$vp = "parent" . $row['parent_id'];
if(isset($data[$row['parent_id']])) {
${$vp} = $data[$row['parent_id']];
}
else {
${$vp} = array('id' => $row['parent_id'], 'username' => $row['username'], 'parent_id' => null, 'children' => array());
$data[$row['parent_id']] = &${$vp};
}
${$vp}['children'][] = &${$vn};
$data[$row['parent_id']] = ${$vp};
}
$data[$row['id']] = &${$vn};
}
return array_filter($data, function($elem) { return is_null($elem['parent_id']); });
}
この出力を生成する上記の関数:
{"157":{"id":"157","username":"okamikid1","parent_id":null,"children":[{"id":"158","parent_id":"157","username":"okamikid1","children":[]},{"id":"160","parent_id":"157","username":"okamikid2","children":[]}]}}
機能を手伝ってくださいtree
。それぞれの側にノードを表示する方法を教えてください。助けてくれて本当にありがとう。