在php

时间:2016-10-05 13:25:06

标签: php arrays function loops recursion

我在下面的PHP代码中显示了一个情况,我想创建一个名为check_recursive()的递归函数。

我在下面创建了check_recursive()函数,但如果可能的话,我想要一个递归函数。

谢谢!

    $menu = '[{"id":"3|case_studies","children":[{"id":"2|case_studies","children":[{"id":"1|custom_links","children":[{"id":"2|faqe"}]}]}]},{"id":"11|klientet","children":[{"id":"8|klientet","children":[{"id":"7|klientet"}]}]},{"id":"9|klientet","children":[{"id":"10|klientet"}]},{"id":"4|klientet"}]';

    $old_menu = json_decode($menu, true);

    $new_menu = $this->check_recursive($old_menu);

    function check_recursive($old_menu)
    {
        $i = 0;
        $new_menu = [];
        foreach ($old_menu as $menu_item)
        {
            if($name = $this->check_menu($menu_item['id']))
            {
                $new_menu[$i]['id'] = $menu_item['id'] . '|' . $name;
                if(isset($menu_item['children']))
                {
                    $e = 0;
                    foreach ($menu_item['children'] as $menu_item)
                    {
                        if($name = $this->check_menu($menu_item['id']))
                        {
                            $new_menu[$i]['children'][$e]['id'] = $menu_item['id'] . '|' . $name;
                            if(isset($menu_item['children']))
                            {
                                $y = 0;
                                foreach ($menu_item['children'] as $menu_item)
                                {
                                    if($name = $this->check_menu($menu_item['id']))
                                    {
                                        $new_menu[$i]['children'][$e]['children'][$y]['id'] = $menu_item['id'] . '|' . $name;
                                        if(isset($menu_item['children']))
                                        {
                                            $a = 0;
                                            foreach ($menu_item['children'] as $menu_item)
                                            {
                                                if($name = $this->check_menu($menu_item['id']))
                                                {
                                                    $new_menu[$i]['children'][$e]['children'][$y]['children'][$a]['id'] = $menu_item['id'] . '|' . $name;
                                                }
                                                $a++;
                                            }
                                        }
                                    }
                                    $y++;
                                }
                            }
                        }
                        $e++;
                    }
                }
            }
            $i++;
        }
        return $new_menu;
    }

    function check_menu($string){
        //Check if string exists in database
        if($string){ 
            return 'String exists';
        }
        return false;
    }

1 个答案:

答案 0 :(得分:0)

我想出了这个:

$menu = '[{"id":"3|case_studies","children":[{"id":"2|case_studies","children":[{"id":"1|custom_links","children":[{"id":"2|faqe"}]}]}]},{"id":"11|klientet","children":[{"id":"8|klientet","children":[{"id":"7|klientet"}]}]},{"id":"9|klientet","children":[{"id":"10|klientet"}]},{"id":"4|klientet"}]';

$old_menu = json_decode($menu, true);

$new_menu = check_recursive($old_menu);

function check_recursive($old_menu)
{
    $new_menu = array();

    foreach ($old_menu as $item) {
        $name = check_menu($item['id']);
        if($name){
            $new_item = array(
                'id' => $item['id'] . '|' . $name,
            );

            if(isset($item['children'])){
                $new_item['children'] = check_recursive($item['children']);
            }

            $new_menu[] = $new_item;
        }

    }

    return $new_menu;
}

function check_menu($string)
{
    //Check if string exists in database
    if ($string) {
        return 'String exists';
    }
    return false;
}

请告诉我它是否符合您的需求。