我需要从像这样组织的 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);
最佳答案
我发现这段用于对父子数组进行分组的代码非常神奇。我已经测试了 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
数据类型是对象
,而不是数组
祝你好运
更新
您可以这样创建数组
$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
}
关于php - 使用 mysql 中的递归 php 创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11007826/