Php 如何显示<;ul>;向左和向右
我有下表的菜单: 查询表格:Php 如何显示<;ul>;向左和向右,php,html,css,Php,Html,Css,我有下表的菜单: 查询表格: CREATE TABLE IF NOT EXISTS `menu` ( `id` int(11) NOT NULL AUTO_INCREMENT, `sub_id` int(11) NOT NULL, `menu` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) INSERT INTO `menu` (`id`, `sub_id`, `menu`) VALUES (1, 0, 'Right'), (2, 0
CREATE TABLE IF NOT EXISTS `menu` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sub_id` int(11) NOT NULL,
`menu` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `menu` (`id`, `sub_id`, `menu`) VALUES
(1, 0, 'Right'),
(2, 0, 'Left'),
(3, 1, 'A1'),
(4, 2, 'B1'),
(5, 3, 'AA1'),
(6, 4, 'BB1');
现在,我希望结果显示在页面右侧的右菜单下的项目和从页面中间到左侧的左菜单,如下所示:
我试着做了以下几件事:
$conn = mysqli_connect('localhost', 'root', '','rnt_reports');
if( !empty($conn->connect_errno)) die("Error " . mysqli_error($conn));
echo"Vikas";
menu(0);
function menu($id){
global $conn;
$sql = "select * from menu where sub_id ='".$id."'";
$result = $conn->query($sql);
while($row = mysqli_fetch_object($result)){
$i = 0;
if ($i == 0) echo '<ul>';
echo '<li>' . $row->menu;
menu($row->id);
echo '</li>';
$i++;
if ($i > 0) echo '</ul>';
}
}
试着用这样一个对象来组织它
class MenuItem {
public $id;
public $menu;
public $subId;
public $subMenu = [];
public function applySubMenus(array $allItems)
{
foreach($allItems as $key => $item) {
if($item->subId == $this->id) {
$this->subMenu[] = $item;
unset($allItems[$key]); // This should prevent infinite recursion
$item->applySubMenus($allItems);
}
}
}
}
诚然,我还没有测试过这个,但它应该可以工作。首先需要将记录中的数据加载到此对象中
更新:修复并测试代码:为什么需要使用数据库打印菜单?这是不需要的,可能很慢,不推荐。您想要什么,请详细说明。数据库表看起来有点奇怪。为什么不使用单独的表或将它们设置为ultype left/right 0/1或其他类型。请更具体一点忽略左右两个词我认为很明显他想要创建一个从sub_id到id的链。如果我回到办公桌时没有人解决这个问题,我应该能够提供帮助。;)是的,我想要一条项链,就像上面说的那样@DanielM
class MenuItem {
public $id;
public $menu;
public $subId;
public $subMenu = [];
public function applySubMenus(array $allItems)
{
foreach($allItems as $key => $item) {
if($item->subId == $this->id) {
$this->subMenu[] = $item;
unset($allItems[$key]); // This should prevent infinite recursion
$item->applySubMenus($allItems);
}
}
}
}