所以我已经能够输出我想要的数据,除了现在我希望能够根据单个项目的分数重新排列它。所以现在我输出如下内容:
<ol>
Item1
<ol>
subitem1A
<ol>
subsubitem1A
</ol>
</ol>
<ol>
subitem1B
</ol>
</ol>
<ol>
Item2
</ol>
我通过将左右值放在一个数组中并迭代它来得到它。如果它是一个左值,它会输出<ol>item
,如果它是正确的,它会关闭它</ol>
使用上面的例子,我想要做的是如果Item2
有一个比 , 更好的分数Item1
,Item2
将是第一个,Item1
它的所有孩子都将在它之后。如果subitem1B
分数高于subitem1A
,subitem1B
将是之前subitem1A
及其所有子项。
我不确定在运行将所有 html 放入变量以供输出的循环之前是否必须对 DB 查询或其他操作做一些事情,但我在考虑是否有输出以某种方式可以检查任何<ol>
是 parent 的直接孩子的<ol>
。因此,如果我查看subitem1A
并查看其父项,Item1
则查找具有父项的任何<ol>
人Item1
,检查分数,然后进行相应的排序。我不知道这是否可能,但这是我的思考过程。
编辑 - 根据要求添加更多信息。
我做这个查询:
$sql = "SELECT * FROM table WHERE uCId = '$uCId' AND lft BETWEEN 2 AND '$max' ORDER BY lft ASC";
$result = mysql_query($sql);
然后:
$ol = array();
$html = "";
while ($row = mysql_fetch_array($result)) {
$ol[$row['lft']] = array('type'=>'open',
'text'=>$row['text']
//and more stuff like score, date, etc
);
$ol[$row['rgt']] = array('type'=>'close');
}
$olCount = count($ol);
for ($d=2; $d<=$olCount; $d++) {
if ($ol[$d]['type'] == 'open') {
$html.= '<ol>various html'.$ol[$d]['text'].'various html';
}else{
$html .= '</ol>';
}
基本上我只是遗漏了一些 html,这只会让事情变得更难阅读。乐谱可以放在任何需要的地方。的 id<ol>
可以是分数或任何东西。随便什么都行。