我需要从像这样组织的mysql数据库中创建一个数组
id description parentId
1 Level 1 0
2 Level 2 0
3 Level 1a 1
4 Level 1b 1
5 Level 1a1 3
6 Level 1a1a 5
这样输出就像这样:
Level 1
Level 1a
Level 1a1
Level 1a1a
Level 1b
Level 2
但是我当前的代码只输出到第二级,然后让其他每个孩子都成为自己的父级。以下是当前代码:
$query = "SELECT * FROM pB_test ORDER BY parentId ASC";
$result = mysql_query($query) or die ('Database Error (' . mysql_errno() . ') ' . mysql_error());
$tree = array();
while($row = mysql_fetch_assoc($result))
{
if($row['parentId'] == 0)
{
$row['Children'] = array();
$tree[$row['id']] = array(
'id' => $row['id'],
'description' => $row['description'],
'parentId' => $row['parentId']
);
}
else
{
$tree[$row['parentId']]['Children'][$row['id']] = $row['description'];
}
}
$count = array_keys($tree);
foreach ($count as $array)
{
ksort($tree[$array]['Children']);
}
echo print_r($tree, true);
任何正确方向的帮助或推动都会很棒。干杯
更新:工作代码
$results = array();
while($row=mysql_fetch_assoc($dbresult))
{
$results[]=$row;
$tree = null;
foreach($results as $result)
{
$thisref = &$refs->{$result['id']};
foreach($result as $k => $v)
{
$thisref->{$k} = $v;
}
if ($result['parentId'] == 0) {
$tree->{$result['id']} = &$thisref;
} else {
$refs->{$result['parentId']}->children->{$result['id']} = &$thisref;
}
}
$tree; // contains the newly sorted tree.
}
print_r($tree);
答案 0 :(得分:4)
我发现这个用于将父子数组分组的代码非常棒。我已经在4个深度进行了测试,没有任何问题。但它不是一个递归函数。
$tree = null;
foreach($results as $result)
{
$thisref = &$refs->{$result['id']};
foreach($result as $k => $v)
{
$thisref->{$k} = $v;
}
if ($result['parentId'] == 0) {
$tree->{$result['id']} = &$thisref;
} else {
$refs->{$result['parentId']}->children->{$result['id']} = &$thisref;
}
}
$tree; // contains the newly sorted tree.
您可能需要对其进行一些修改才能完全适应您的情况。但基本上它会遍历所有结果并通过引用将它们组合在一起。
请注意,结尾$tree
数据类型为object
而不是array
祝你好运
<强>更新强>
您可以这样创建数组
$query = "SELECT * FROM pB_test ORDER BY parentId ASC";
$dbresult = mysql_query($query) or die ('Database Error (' . mysql_errno() . ') ' . mysql_error());
$results = array();
while($row=mysql_fetch_assoc($dbresult))
{
$results[]=$row
}
答案 1 :(得分:1)
如果您创建一个在创建对象时从id映射到对象的数组,那么您可以轻松地查找嵌套对象,这可能是最简单的。基本上是:
$tree = array();
$lookup = array();
while($row = mysql_fetch_assoc($result))
{
$object = array('id' => $row['id'],
'description' => $row['description'],
'parentId' => $row['parentId']);
$lookup[$row['id']] = $object;
$parentId = $row['parentId'];
if ($parentId == 0)
{
$tree[] = $object;
}
else
{
$lookup[$parentId]['Children'][] = $object;
}
}