AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"

Почему функция не принимает новый аргумент?

Есть функция
function checkSunday($result)
{
    $a = 0;
    foreach ($result as $key => $res)
    {
        if (strftime("%A", $res) === 'Sunday')
        {
            $resultNew = shift($result, $key);
            $a++;
            break;
        }
    }
    if ($a === 0) {insert($resultNew); return true;}
    else {reCall($resultNew); return false;}
}

Она вызывает функцию записи, если в массиве не найдено дат с воскресеньем, в обратном случае вызывает функцию, которая вызывает снова ее с переданным параметром:
function reCall($result)
{
   checkSunday($result);
}

Проблема в том что новый массив, который обработала функция в первый раз не передается, а вместо него отправляется старый, тот что был до первой обработки.

shift:
function shift($array, $elem)
{
    for ($i = $elem; $i < sizeof($array)-$elem-1; $i++)
    {
        $array[$i] = $array[$i] + 1 * 24 * 3600;
    }
    return $array;
}

В чем я ошибаюсь?
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 1
boyarskiy_mihail
@boyarskiy_mihail
Не понял к чему такая конструкция:
for ($i = $elem; $i < sizeof($array)-$elem-1; $i++)

Если, например $elem = 6, a sizeof($array) = 10, то sizeof($array)-$elem-1 = 10-6-1 = 3, значит цикл for не будет иметь итераций.
Мб функция shift, должна выглядеть так:
function shift($array, $elem)
{
    $array[$elem] += 1 * 24 * 3600;
    return $array;
}

+ ко всему, даже если в массиве не будет найдено дат с воскр., то в функцию insert будет передан $resultNew, который не существует, т.к. он создается, если есть даты с воскр. перередавай в нее просто $result
+ зачем функция reCall если вместо нее можно вызывать checkSunday($resultNew)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы