Heim > Backend-Entwicklung > PHP-Tutorial > php 数组获取父节点

php 数组获取父节点

WBOY
Freigeben: 2016-06-06 20:26:41
Original
1787 Leute haben es durchsucht

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

回复内容:

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

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

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

<code>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;
    }
}</code>
Nach dem Login kopieren

使用:

<code>$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
)
*/</code>
Nach dem Login kopieren

代码在哪里?

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage