簡體   English   中英

在php中從數組創建遞歸函數

[英]Create recursive function from array in php

我在下面的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;
    }

我想出了這個:

$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;
}

讓我知道它是否適合您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM