bey*_*ski 17 php mysql hierarchy categories
我试图从层次结构中获取MySQL数据库中的所有类别和子类别:
我的结果应该是那样的(只是示例):
- 猫A
- 子猫1
- Sub_Sub_Cat 1
- Sub_Sub_Cat 2
- Sub_Cat 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 ;
Run Code Online (Sandbox Code Playgroud)
简单地说,如何使用PHP代码进行hirarchy ?
sim*_*aun 48
使用邻接列表模型时,可以一次生成结构.
取自One Pass亲子阵列结构(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;
}
}
Run Code Online (Sandbox Code Playgroud)
从链接的文章中,这是一个用于创建输出列表的代码段.它是递归的,如果节点有子节点,它会再次调用自己来构建子树.
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;
}
Run Code Online (Sandbox Code Playgroud)
相关问题: