当前位置:Gxlcms > PHP教程 > php数组获取父节点

php数组获取父节点

时间:2021-07-01 10:21:17 帮助过:21人阅读

比如一个数组里包括地名,你已经知道了石家庄,怎么知道它的上级河北。或者你已经知道了北京,怎么知道它的上级中国

回复内容:

比如一个数组里包括地名,你已经知道了石家庄,怎么知道它的上级河北。或者你已经知道了北京,怎么知道它的上级中国

用id做数组的键 每项里面包括parent_id

最近刚好写了一份获取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 ) */

代码在哪里?

人气教程排行