php - 使用 mysql 中的递归 php 创建数组

标签 php mysql arrays recursion

我需要从像这样组织的 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/

相关文章:

arrays - swift 3 : Remove value in Array with Unknown index

php - 使用php preg_match(正则表达式)将camelCase单词拆分为单词

mysql - 尝试将附加值添加到使用存储过程检索的所有行的列中的现有值

php - mysql 从 3 个表中选择,其中 2 个可能为空

mysql - 如果您尝试更新正在查询的表,MySQL 会做什么?

mysql - 在nodejs中可以同步mysql查询吗?

javascript - 如何按顺序合并两个数组?

javascript - 无法在 JavaScript 中删除数组元素

php - 使用 MYSQL 数据库中的数据绘制 google 饼图时遇到问题

php - 将 JavaScript 变量发送到 PHP