我有一个应用程序需要能够从数据库获取过程并以正确的顺序显示步骤。有时,步骤有子步骤,而有时,这些子步骤可以有自己的子步骤。我无法为每个过程编写单独的 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/