Member 13590009 Ответов: 1

Остановите 2 функции, которые рекурсивно вызывают друг друга


Допустим, у меня есть 2 функции, которые могут вызывать друг друга

public static function goToAction($action,$sender_id)
    {
        $actions = array();
        $logic = file_get_contents('../../logic/logic.json');
        $logic_array = json_decode($logic, true);
        unset($logic);
        if (!isset($logic_array[$action])) {
            return false;
        } else {
            foreach ($logic_array[$action] as $action) {
                $actions[] = self::parseActionType($action,$sender_id);
            }
        }
        return $actions;
    }
    

     public static function parseActionType($actions,$sender_id)
    {
        $data = array();
        foreach ($actions as $key => $action) {
            switch ($key) {
                case 'goto': { 
                          $goto_actions = self::goToAction($action,$sender_id);
                          foreach ($goto_actions as $goto_action){
                          $data[] = $goto_action;
                      } break;
                      ...
       }
    }
    return $data;
    }


а вот и мой json файл:

"no_return": [
    { "text": "Должно быть: 1, 2, 3"},
    { "text": "1" },
    { "goto": "2nr", "no_return": true},
    { "text": "5" }
    ],
    "2nr": [
    { "text": "2" },
    { "goto": "3", "no_return": true},
    { "text": "4"}
    ],
    "3nr": [
    { "text": "3" }
    ],

он возвращает 12345 , и это правильно, но как я могу заставить его вернуть 123, если "no_return" установлен в "true"?

Что я уже пробовал:

Я даже не знаю, как мне решить эту проблему

1 Ответов

Рейтинг:
2

W∴ Balboos, GHB

Вы справляетесь с ним, как с любым другим циклом - у вас есть тест на то, продолжает ли он цикл или завершается.

Для любой рекурсивной функции (одна или две, одна и та же идея) это всегда одно и то же. Построить отказоустойчивый или смотреть,как он рушится и горит.

Итак - что вы можете проверить, что позволит вам контролировать цикл?