Khi sử dụng mô hình danh sách kề, bạn có thể tạo cấu trúc trong một lần chuyển.
Lấy từ One Pass Parent- Cấu trúc mảng con (tháng 9 năm 2007; bởi Nate Weiner) :
$refs = array();
$list = array();
$sql = "SELECT item_id, parent_id, name FROM items ORDER BY name";
/** @var $pdo \PDO */
$result = $pdo->query($sql);
foreach ($result as $row)
{
$ref = & $refs[$row['item_id']];
$ref['parent_id'] = $row['parent_id'];
$ref['name'] = $row['name'];
if ($row['parent_id'] == 0)
{
$list[$row['item_id']] = & $ref;
}
else
{
$refs[$row['parent_id']]['children'][$row['item_id']] = & $ref;
}
}
Từ bài viết được liên kết, đây là một đoạn mã để tạo danh sách cho đầu ra. Nó là đệ quy, nếu có một nút con cho một nút, nó sẽ gọi lại chính nó để xây dựng cây con.
Hàmfunction toUL(array $array)
{
$html = '<ul>' . PHP_EOL;
foreach ($array as $value)
{
$html .= '<li>' . $value['name'];
if (!empty($value['children']))
{
$html .= toUL($value['children']);
}
$html .= '</li>' . PHP_EOL;
}
$html .= '</ul>' . PHP_EOL;
return $html;
}
Câu hỏi liên quan: