Php 从fetch_assoc()构建注释树(表单mysqli prepare with getresult)
我上过一节课Php 从fetch_assoc()构建注释树(表单mysqli prepare with getresult),php,tree,Php,Tree,我上过一节课 $this->article_id = 14; $this->res = $this->conn->prepare("Select id,name, parent_id FROM Comments WHERE article_id = ? ORDER BY id"); $this->res->bind_param('i', $this->article_id); $this->res->execute(); $this->
$this->article_id = 14;
$this->res = $this->conn->prepare("Select id,name, parent_id FROM Comments WHERE article_id = ? ORDER BY id");
$this->res->bind_param('i', $this->article_id);
$this->res->execute();
$this->res = $this->res->get_result();
这对……很管用
echo '<ul>';
while($row = $this->res->fetch_assoc()) {
echo "<li>comment $row[name]-id:$row[id] parent: $row[parent_id]</li>";
}
echo '</ul>';
// Result:
<ul>
<li>comment foo1-id:1 parent: 0</li>
<li>comment foo2-id:2 parent: 4</li>
<li>comment foo3-id:3 parent: 0</li>
<li>comment foo4-id:4 parent: 1</li>
<li>comment foo5-id:5 parent: 2</li>
<li>comment foo6-id:6 parent: 2</li>
<li>comment foo7-id:7 parent: 5</li>
<li>comment foo8-id:8 parent: 1</li>
<li>comment foo9-id:9 parent: 3</li>
<li>comment foo10-id:10 parent: 1</li>
</ul>
echo'';
而($row=$this->res->fetch\u assoc()){
echo“- 注释$row[name]-id:$row[id]parent:$row[parent_id]
”;
}
回声“
”;
//结果:
- 注释foo1 id:1父级:0
- 注释foo2 id:2父项:4
- 注释foo3 id:3父级:0
- 注释foo4 id:4父项:1
- 注释foo5 id:5父项:2
- 注释foo6 id:6父项:2
- 注释foo7 id:7父项:5
- 注释foo8 id:8父项:1
- 注释foo9 id:9父项:3
- 注释foo10id:10父项:1
现在我想要一个结果,以树模式显示注释,突出显示注释及其回复…:
<ul>
<li>comment foo1-id: 1 parent: 0</li>
<li>
<ul>
<li>comment foo4-id: 4 parent: 1</li>
<li>
<ul>
<li>comment foo2-id:2 parent: 4</li>
<li>
<ul>
<li>comment foo5-id:5 parent: 2</li>
<li>
<ul>
<li>comment foo7-id:7 parent: 5</li>
</ul>
</li>
<li>comment foo6-id:6 parent: 2</li>
</ul>
</li>
</ul>
</li>
<li>comment foo8-id: 8 parent: 1</li>
<li>comment foo10-id: 10 parent: 1</li>
</ul>
</li>
<li>comment foo3-id: 3 parent: 0</li>
<li>
<ul>
<li>comment foo9-id:9 parent: 3</li>
</ul>
</li>
</ul>
- 注释foo1 id:1父级:0
-
- 注释foo4 id:4父项:1
-
- 注释foo2 id:2父项:4
-
- 注释foo5 id:5父项:2
-
- 注释foo7 id:7父项:5
- 注释foo6 id:6父项:2
- 注释foo8 id:8父项:1
- 注释foo10id:10父项:1
- 注释foo3 id:3父级:0
-
- 注释foo9 id:9父项:3
我尝试了很多解决方案,但效果不好。。。
Whit递归函数,例如:
$comments = array();
while($row = $this->res->fetch_assoc()) {
$row['children'] = array();
$comments[$row['id']] = $row;
}
foreach ($comments as $k => &$v) {
if ($v['parent_id'] != 0) {
$comments[$v['parent_id']]['children'][] =& $v;
}
}
unset($v);
// delete the childs comments from the top level
foreach ($comments as $k => $v) {
if ($v['parent_id'] != 0) {
unset($comments[$k]);
}
}
function toUl ($arr) {
$html = '<ul>' . PHP_EOL;
foreach ( $arr as $v ) {
$html.= '<li>comment '.$v['name'].'-id'.$v['id'].' parent: '.$v['parent_id'].'</li>' . PHP_EOL;
if ( array_key_exists('children', $v) ) {
$html.= toUL($v['children']);
}
}
$html.= '</ul>' . PHP_EOL;
return $html;
}
echo toUl($comments);
var_dump($comments):
array(2) {
[3]=> array(4) {
["id"]=> int(3)
["parent_id"]=> int(0)
["name"]=> string(4) "foo3"
["children"]=> array(0) { }
}
[1]=> array(4) {
["id"]=> int(1)
["parent_id"]=> int(0)
["name"]=> string(4) "foo1"
["children"]=> array(1) {
[0]=> array(4) {
["id"]=> int(4)
["parent_id"]=> int(1)
["name"]=> string(4) "foo4"
["children"]=> array(1) {
[0]=> array(4) {
["id"]=> int(2)
["parent_id"]=> int(4)
["name"]=> string(4) "foo2"
["children"]=> array(0) { }
}
}
}
}
}
}
array(2) {
[3]=> array(4) {
["id"]=> int(3)
["parent_id"]=> int(0)
["name"]=> string(4) "foo3"
["children"]=> array(0) { }
}
[1]=> array(4) {
["id"]=> int(1)
["parent_id"]=> int(0)
["name"]=> string(4) "foo1"
["children"]=> array(1) {
[0]=> array(4) {
["id"]=> int(4)
["parent_id"]=> int(1)
["name"]=> string(4) "foo4"
["children"]=> array(1) {
[0]=> array(4) {
["id"]=> int(2)
["parent_id"]=> int(4)
["name"]=> string(4) "foo2"
["children"]=> array(0) { }
}
}
}
}
}
}
$comments=array();
而($row=$this->res->fetch\u assoc()){
$row['children']=array();
$comments[$row['id']]=$row;
}
foreach($k=>&v注释){
如果($v['parent_id']!=0){
$comments[$v['parent_id']['children'][]=&$v;
}
}
未结算(五美元);
//从顶层删除孩子的注释
foreach($k=>v){
如果($v['parent_id']!=0){
未设置($comments[$k]);
}
}
函数toUl($arr){
$html=''.PHP\u EOL;
外汇($arr为$v){
$html.='- 注释'$v['name'].-id'.$v['id'.'父项:'.$v['parent\u id'..
.'.PHP\u EOL;
如果(数组\键\存在('children',$v)){
$html.=toUL($v['children']);
}
}
$html.='
'.PHP\u EOL;
返回$html;
}
echo toUl(评论);
变量转储($comments):
阵列(2){
[3] =>阵列(4){
[“id”]=>int(3)
[“父项id”]=>int(0)
[“名称”]=>字符串(4)“foo3”
[“子项”]=>数组(0){}
}
[1] =>阵列(4){
[“id”]=>int(1)
[“父项id”]=>int(0)
[“名称”]=>字符串(4)“foo1”
[“子项”]=>数组(1){
[0]=>阵列(4){
[“id”]=>int(4)
[“家长id”]=>int(1)
[“名称”]=>字符串(4)“foo4”
[“子项”]=>数组(1){
[0]=>阵列(4){
[“id”]=>int(2)
[“家长id”]=>int(4)
[“名称”]=>字符串(4)“foo2”
[“子项”]=>数组(0){}
}
}
}
}
}
}
阵列(2){
[3] =>阵列(4){
[“id”]=>int(3)
[“父项id”]=>int(0)
[“名称”]=>字符串(4)“foo3”
[“子项”]=>数组(0){}
}
[1] =>阵列(4){
[“id”]=>int(1)
[“父项id”]=>int(0)
[“名称”]=>字符串(4)“foo1”
[“子项”]=>数组(1){
[0]=>阵列(4){
[“id”]=>int(4)
[“家长id”]=>int(1)
[“名称”]=>字符串(4)“foo4”
[“子项”]=>数组(1){
[0]=>阵列(4){
[“id”]=>int(2)
[“家长id”]=>int(4)
[“名称”]=>字符串(4)“foo2”
[“子项”]=>数组(0){}
}
}
}
}
}
}
输出:
<ul>
<li>comment foo3-id3 parent: 0</li>
<ul>
</ul>
<li>comment foo1-id1 parent: 0</li>
<ul>
<li>comment foo4-id4 parent: 1</li>
<ul>
<li>comment foo2-id2 parent: 4</li>
<ul>
</ul>
</ul>
</ul>
</ul>
- 注释foo3-id3父项:0
- 注释foo1-id1父项:0
- 注释foo4-id4父项:1
- 注释2-id2父项:4
有点不对劲…:-(不要在fetch\u assoc循环中直接回显结果,尝试在其中定义一个多维数组,然后循环该数组以回显HTML结构。粘贴一些您尝试过的代码,请查找您可以使用的内容-选中此项:@divaka好的,我已经尝试过了,输出没有任何内容。(
echo toUl($comments)
?您必须回显:)或者您可以将其传递给变量,比如说$comments\u html=toUl($comments)
,然后回显$comments\u html