php 父节点,php 数组获取父节点

最近刚好写了一份获取n维数组某个节点的深度和父级节点的代码,希望对题主有用

class ArrayUtil {

/**

* 深度优先遍历查找一个树形结构中,某个节点的所在位置

*

* 参数例子:

* $input: [

* 'a' => [

* 'b' => [

* 'c' => []

* ]

* ],

* 'd' => [

* ]

* ]

* $target: c

* 返回值: [3, ['a','b','c']]

*

* 可以用list($level, $pathKeys) = self::getNodeLevel(....)来进行使用

* $level表示层级

* $pathKeys表示访问到这个节点需要经过的key

*

* @param array $input 输入

* @param string $target 希望查找的节点(key或者value),例如 'f'

* @param array $pathKeys 节点数组列表

* @return null|array [$level, [$pathKey0, $pathKey1, ...]] 没有找到时会返回空

*/

public static function getNodeLevel(array $input, $target, array $pathKeys = [])

{

foreach ($input as $key => $val) {

$pathKeys[] = $key;

if ($key == $target) {

return [count($pathKeys), $pathKeys];

} elseif (is_array($val)) {

//当前范围没有找到值,递归进入下一层

$result = self::getNodeLevel($val, $target, $pathKeys);

if ($result) {

return $result;

}

}

array_pop($pathKeys);

}

return null;

}

}

使用:

$input = [

'a' => [

'b' => [

'c' => ['hello', 'world']

]

],

'd' => [

]

];

list($depth, $parents) = ArrayUtil::getNodeLevel($input, 'c');

print_r($depth); //层级,输出3

echo "\n";

print_r($parents);

/*

父级节点,输出

Array

(

[0] => a

[1] => b

[2] => c

)

*/

//获得目标节点的子数组

$target = &$input;

foreach ($parents as $key) {

$target = &$target[$key];

}

print_r($target);

/*

输出子节点

Array

(

[0] => hello

[1] => world

)

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值