我试图从我的MySQL数据库中按层次结构获取所有类别和子类别:
我的结果应该是这样(只是示例):
猫A 子猫1 Sub_Sub_Cat 1 Sub_Sub_Cat 2 子猫2 猫B C猫 …
MySQL代码:
CREATE TABLE IF NOT EXISTS `categories` ( `category_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `parent_id` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'for sub-categories' PRIMARY KEY (`category_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
简而言之,如何在使用 PHP代码 的层次结构中获得它?
使用邻接表模型时,您可以一次性生成结构。
取自一遍父子数组结构(2007年9月; 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; } }
在链接的文章中,这是一个片段,用于创建输出列表。它是递归的,如果节点有子代,它将再次调用自身以建立子树。
function 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; }
相关问题: