php 递归问题,想要将数据按照无限极分类的样式显示出来

例子:$str='[{"id":1,"name":"lideqi","parentid":0,"childs":[{"id":2,"name":"mahnqiu","pa... 例子:$str = '[{"id":1,"name":"lideqi","parentid":0,"childs":[{"id":2,"name":"mahnqiu","parentid":1,"childs":[{"id":3,"name":"wangxiao","parentid":2},{"id":5,"name":"realy","parentid":2,"childs":[{"id":6,"name":"month","parentid":5}]}]},{"id":7,"name":"dog","parentid":1}]},{"id":4,"name":"good","parentid":0}]';上面是一个json串,其中子节点可能会有很多,例子中只是展示一小部分,想要达到的效果如图:
有层级关系的。。谢谢哦!
展开
 我来答
天色无双
推荐于2018-03-11 · TA获得超过394个赞
知道小有建树答主
回答量:304
采纳率:0%
帮助的人:259万
展开全部

首先 将json 解码成数组, 用json_decode 函数 注意 一定要加上第二个参数 否则他会返回一个对象。接下来就是地递归了。这是一个最简单的递归只要逐个遍历即可。

下面是完整的代码:

$data= json_decode($str,true);
$options = getChildren($data);
function getChildren($parent,$deep=0) {
foreach($parent as $row) {
$data[] = array("id"=>$row['id'], "name"=>$row['name'],"pid"=>$row['parentid'],'deep'=>$deep);
if ($row['childs']) {
$data = array_merge($data, getChildren($row['childs'], $deep+1));
}
}
return $data;
}
?>
<select name="" id="">
<?php  foreach ($options as $row) { ?>
<option value="<?php echo $row['id'] ?>"><?php echo str_pad("",$row['deep']*3, "-",STR_PAD_RIGHT); ?><?php echo $row['name']; ?></option>
<?php } ?>
</select>


以上代码已测试通过 效果图如下

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式