一个树形的数组,$tree = array(‘id’=>‘1’, ‘name’=>‘父级’, ‘child’=>array(array(‘id’=>‘2’, ‘name’=>‘子级’, ‘child’=>array(array(‘id’=>‘3’, ‘name’=>‘子子级’, ‘child’=>array())))));
请写一个函数,function getTreePath($id),返回输入id的所在节点的路径描述。
例如:当输入$id=3时,返回字符串"父级->子级->子子级"
思路:解决思路是当查询到当前child的变量是数组并且不为空的时候,需要循环当前的child数组,循环这个数组需要判断里面需要寻找的id,是否是当前数组中value的值,如果不是,拼接学需要的当前级别的名称,继续递归寻找,并把当前拼接的字符串也传过去,如果当前数组里面的id是所需要找的id是,则只需要拼接就可以了.最后在数组循环的时候返回当前的字符串.
/**
* 递归获取父子级名称
* @param $tree 数组
* @param $id 子级id
* @param string $str 结果字符串
* @return string
*/
static public function getTreePath($tree, $id, &$str='') {
if(!$str) $str = $tree['name'];
foreach($tree as $k=>$v)
{
if(count($v)>0 && $k=='child'){
if($id==$v[0]['id'])
{
$str = $str.'->'.$v[0]['name'];
}else{
$str = $str.'->'.$v[0]['name'];
self::getChilds($v[0],$id,$str);
}
}
}
return $str;
}