Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql中的父子关系_Php_Mysql_Hierarchical Data - Fatal编程技术网

Php mysql中的父子关系

Php mysql中的父子关系,php,mysql,hierarchical-data,Php,Mysql,Hierarchical Data,我有一个如下表,需要显示为父和子格式 -------------------------------------------------------- id role_name role_id parent_id -------------------------------------------------------- 1 NSM 1 0 2 MR 5 2 3

我有一个如下表,需要显示为父和子格式

--------------------------------------------------------
    id   role_name   role_id   parent_id
--------------------------------------------------------
    1     NSM           1        0
    2     MR            5        2
    3     ASM           4        3
    4     ZSM           3        4
    5     RSM           2        1
---------------------------------------------------------
结果如下所示

NSM
  ---RSM
     -----ZSM
          -----NSM
               -----MR

NSM->ROOT
 RSM->FIRST CHILD
  ZSM->SECOND CHILD
   NSM->THIRD CHILD
    MR->LEAF

SQL结果总是平坦的-您将无法在查询中返回该数据的层次结构视图


相反,我建议使用您正在使用的任何客户端组件来显示(它是树吗?具体是什么?)它知道如何遍历平面列表并从中构建层次结构。

如果您希望在控制台中打印这样的视图(为什么要这样做?),您可以这样做:

$data = array();
$query = mysql_query("SELECT * FROM table ORDER BY parent_id");
while($array = mysql_fetch_assoc($query))
{
  $data[$array['parent_id']][] = $array;
}

function output_hierarchy($id, $prepend)
{
  $current = $data[$id];
  foreach($current as $item)
  {
    print $prepend . " " . $item['role_name'];
    if(count($data[$item['id']]) > 0)
    {
      output_hierarchy($item['id'], $prepend . "--");
    }
  }
}

output_hierarchy(0, '');
如果你想在你的网站上使用它,你可以很容易地调整它。代码应该是自解释的。

//获取所有角色
// Fetch all the roles
$result = mysql_query("select * from roles");
$roles = array();
while( $role = mysql_fetch_assoc($result) ) {
    $roles[] = $role;
}

// Function that builds a tree
function build_tree($roles, $parent_id=0) {
    $tree = array();
    foreach ($roles as $role) {
        if ($role['parent_id'] == $parent_id) {
            $tree[] = array(
                'role' => $role,
                'children' => build_tree($roles, $role['parent_id'])
            );
        }
    }

    return $tree;
}

// Function that walks and outputs the tree
function print_tree($tree) {
    if (count($tree) > 0) {
        print("<ul>");
        foreach($node in $tree) {
            print("<li>");
            htmlspecialchars($node['role']['role_name']);
            print_tree($node['children']);
            print("</li>");
        }
        print("</ul>");
    }
}
$result=mysql_查询(“从角色中选择*); $roles=array(); while($role=mysql\u fetch\u assoc($result)){ $roles[]=$role; } //构建树的函数 函数生成树($roles,$parent\u id=0){ $tree=array(); foreach($roles作为$role){ 如果($role['parent\u id']==$parent\u id){ $tree[]=数组( “角色”=>$role, 'children'=>build_树($roles,$role['parent_id')) ); } } 返回$tree; } //用于遍历和输出树的函数 函数打印树($tree){ 如果(计数($tree)>0){ 打印(
    ); foreach($树中的节点){ 打印(
  • ); htmlspecialchars($node['role']['role_name']); 打印树($node['children']); 打印(“
  • ”); } 打印(“
”); } }
以及您试图解决此问题的代码?请加上它。这可能应该是一个评论。它没有回答任何问题,因为没有真正需要回答的问题。Leon我需要它就像是一个条目,在它下面是这样的视图,只是我像其他人评论的那样展示了它,请提供代码或更多说明,说明如何在网页上显示此功能。我是否可以建议将函数命名为比
makeStuffOccess
更具描述性的名称?可能是
输出\u层次结构