[英]Multi level menu with PHP
I have a subject table like this: 我有这样一个主题表:
id
title
parent_id
full_path
full_path
is for finding parent as recursive. full_path
用于查找作为递归的父对象。 Like this: 像这样:
+----+-----------+-----------+-----------+
| id | title | full_path | parent_id |
+----+-----------+-----------+-----------+
| 40 | home | 40 | 0 |
| 41 | myhome1 | 41 | 0 |
| 42 | **** | 40-42 | 40 |
| 43 | ***** | 41-43 | 41 |
| 44 | *** | 44 | 0 |
| 45 | **** | 45 | 0 |
| 46 | ***** | 46 | 0 |
| 49 | ****** | 49 | 0 |
| 50 | **** ** | 40-42-50 | 42 |
| 51 | **** ** | 40-42-51 | 42 |
| 52 | **** ** | 40-42-52 | 42 |
| 53 | ******* | 40-53 | 40 |
| 54 | **** | 40-54 | 40 |
| 55 | *** | 41-55 | 41 |
| 56 | **** **** | 40-42-56 | 42 |
| 57 | ******* | 44-57 | 44 |
+----+-----------+-----------+-----------+
How i can get an recursive array like this: 我如何获得这样的递归数组:
array
(
40 => array
(
42 => array
(
50,51,52,etc.
),
53,
54
)
41 => array
(
43,
55,
),
44 => array
(
57,
),
etc...
)
Can I use full_path
for create multilevel menu? 我可以使用full_path
创建多级菜单吗?
You could use the code below to do this. 您可以使用下面的代码执行此操作。 Keep in mind that this works because your subjects array will be very small and the recursion that happens will be minimal. 请记住,这是可行的,因为您的subject数组将非常小,并且发生的递归将最小。 Dont use this approach on large arrays. 不要在大型阵列上使用此方法。
<?php
$query = "SELECT id, parent_id FROM subjects";
//execute with your prefered method, eg mysqli
$rows = array();
while($row = $result->fetch_array(MYSQLI_ASSOC))
{
$rows[] = $row;
}
function getChildren($p) {
global $rows;
$r = array();
foreach($rows as $row) {
if ($row['parent_id']==$p) {
$r[$row['id']] = getChildren($row['id']);
}
}
return $r;
}
$final = getChildren(0);
?>
I edited Hugo's code: 我编辑了雨果的代码:
MySQL's code: sqlfiddle MySQL的代码: sqlfiddle
our table like this: 我们的桌子是这样的:
ID | Categories_name | Parent_id
our Data is(the numbers on picture, shows id categories): 我们的数据是(图片中的数字,显示ID类别):
our PHP codes: 我们的PHP代码:
<?php
$db=mysql_connect("127.0.0.1","root","");
$db_name = "test";
mysql_select_db($db_name,$db);
$query = "SELECT `id`,`cat_name`,`parent_id` FROM `categories`";
$result=mysql_query($query);
$num=mysql_num_rows($result);
$level_each_rows = array();
$rows = array();
for($i = 0 ; $i < $num ; $i++)
{
$q_data = mysql_fetch_array($result);
$rows[] = $q_data;
}
function getChildren_string($p)
{
global $rows;
global $level_each_rows;
$r = array();
$i = 0;
$return = '';
foreach($rows as $row)
{
if ($row['parent_id'] == $p)
{
if($row['parent_id'] == 0)
{
$level_each_rows[$row['id']]['i'] = 0;
}
else
{
$level_each_rows[$row['id']]['i'] = $level_each_rows[$row['parent_id']]['i'] + 1;
}
$return = $return.'
<tr>
<td>'.$row['parent_id'].'</td>
<td><div style="margin:0px '.($level_each_rows[$row['id']]['i'] * 35).'px;">['.$row['id'].'] - '.$row['cat_name'].'</div></td>
</tr>
';
$return = $return.getChildren_string($row['id']);
$i++;
}
}
//---
return $return;
}
$childs = getChildren_string(0);
echo '
<div dir="ltr">
<table dir="ltr" border="1">
<tr>
<td>Parent ID</td>
<td>Child ID</td>
</tr>
';
echo $childs;
echo '
</table>
</div>
';
?>
Result: 结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.