php - mac - system path
MenĂș de niveles mĂșltiples con PHP (2)
Puede usar el siguiente código para hacer esto. Tenga en cuenta que esto funciona porque su matriz de sujetos será muy pequeña y la recursión que se producirá será mínima. No use este enfoque en arreglos grandes.
<?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);
?>
Tengo una tabla de materias como esta:
id
title
parent_id
full_path
full_path
es para encontrar padre como recursivo. Me gusta esto:
+----+-----------+-----------+-----------+
| 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 |
+----+-----------+-----------+-----------+
Cómo puedo obtener una matriz recursiva como esta:
array
(
40 => array
(
42 => array
(
50,51,52,etc.
),
53,
54
)
41 => array
(
43,
55,
),
44 => array
(
57,
),
etc...
)
¿Puedo usar full_path
para crear un menú multinivel?
Edité el código de Hugo:
Código de MySQL: sqlfiddle
nuestra mesa como esta:
ID | Categories_name | Parent_id
nuestros datos son (los números en la imagen, muestra categorías de identificación):
nuestros códigos 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>
'';
?>
Resultado: