php - 排序步骤和子步骤

标签 php mysql recursion

我有一个应用程序需要能够从数据库获取过程并以正确的顺序显示步骤。有时,步骤有子步骤,而有时,这些子步骤可以有自己的子步骤。我无法为每个过程编写单独的 html 页面,因为我们正在讨论其中的很多过程。我打算即时生成 View 。以下是我要显示的示例:

1. Step 1
  a. Step 1a
    i. Step 1ai
    ii. Step 1aii
  b. Step 1b
2. Step 2

就目前而言,我有一个 PROCEDURE 表、一个 STEP 表和一个 PROCEDURE_STEP 表来交叉引用它们。 STEP 表有一个 substep_of 字段,它是父步骤 id 的外键。我还处于可以根据需要修改数据库的阶段。

那么我的问题是在我这样做之后:

mysql_query(SELECT * FROM PROCEDURE_STEP WHERE procedure_id = $id);

如何对它们进行排序,以便每个子步骤都按照其父步骤的顺序整齐地放置在返回数组中?我将把返回数组作为 json 编码数组发送到 View ,如果这有影响的话。

最佳答案

您可能想做类似的事情:

SELECT s.id, s.substep_of AS parent
FROM STEP s, PROCEDURE_STEP ps
WHERE ps.step_id = s.id
AND ps.procedure_id = $id;

这将为您提供一个步骤列表,每个步骤都包含一个 id 和一个父 id。由此,您可以递归地构建一棵树:)...

function get_children_of( $id, $steps ) {
    $children = array();

    foreach( $steps as $step )
        if( $step->parent == $id ) 
            $children[$step->id] = get_children_of( $step->id, $steps );

    // Make it null... so we don't have deal with empty arrays
    if( empty( $children ) ) $children = null; 

    return $children;            
}

$steps = run_crazy_mysql_query();
$tree = get_children_of( 0, $steps );

这应该给你一棵看起来像这样的树:

0 => array(
    1 => null,
    2 => array(
        3 => null,
        4 => null
    )
)

这将为您提供一些可以相对轻松地生成 HTML 步骤列表的工具。

关于php - 排序步骤和子步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867738/

相关文章:

php - woocommerce给50000种产品一个新的类别

PhP MySQL 从数据库中获取某些项目并回显主题

递归与循环

php - 将 MySQL UTC 日期时间转换为 UNIX 时间戳

php - 登录时 Symfony2 和 PHP SDK 4.0 session 问题

php - 如何在不重写或审查所有代码的情况下在版本 5 - 7 之间迁移 PHP 代码

mysql - 是否可以使用现有值从数据库中插入另一个值?

php - 使用 JQuery 表单中的值来选择与表单值匹配的数据库项目

scala - 递归集联合 : how does it work really?

string - 将括号的子集映射到字符