比如一个数组里包括地名,你已经知道了石家庄,怎么知道它的上级河北。或者你已经知道了北京,怎么知道它的上级中国
                                                                                                                                                                                                 回复内容:                                                                                  比如一个数组里包括地名,你已经知道了石家庄,怎么知道它的上级河北。或者你已经知道了北京,怎么知道它的上级中国
用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); //层级,输出3echo \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)*/
代码在哪里?
   
 
   