PHP 通过一个节点找出所有父节点

如图,拿到所有给出节点的父节点。



百度搜了半天,都是通过父节点找子节点的。无奈,后来只能自己写了。遍历+递归,大神们不要鄙视我。。。我数据结构。。。

<?php
	//测试数据
	$arr = [
		['id'=>8,'pid'=>7,'username'=>'test3'],
		['id'=>7,'pid'=>6,'username'=>'test3'],
		['id'=>6,'pid'=>2,'username'=>'test3'],
		['id'=>5,'pid'=>2,'username'=>'test3'],
		['id'=>4,'pid'=>1,'username'=>'test3'],
		['id'=>3,'pid'=>1,'username'=>'test2'],
		['id'=>2,'pid'=>1,'username'=>'test1'],
		['id'=>1,'pid'=>0,'username'=>'admin'],
	];

	//想不到好办法了,用了超全局变量	
	$GLOBALS['ids']  = [];
	getData($arr,1);

	function getData($arr,$id)
	{
		//如果为0表示,没有父级了
	  	if($id == 0 ) return 0;
	 
		foreach($arr as $k =>$v) {
			if($v['id'] == $id) {
				if($v['pid'] != 0 ) $GLOBALS['ids'][] = $v['pid'];
				getData($arr,$v['pid']);
			}
		}
		
	}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值