PHP Вернуть массив следующих дней

157
30 января 2020, 09:00

Нужно реализовать следующую функцию:

get_next_days($day_now, $count)

В которой можно указать $day_now, например "Fri" и count, от которого зависит количество возвращаемых дней, начиная с "Fri", например, если я введу Fri и 3, то должен получить Fri, Sat, Sun

Буду очень благодарен за примеры или готовую функцию! Очень долго ломаю над этим голову!

Answer 1

Так тоже можно:

<?php
function get_next_days($day_now, $count)
{
    $days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
    $idx = array_search($day_now, $days);
    if ($idx === false) {
        return [];
    }
    $ret = [$day_now];
    if (!--$count) {
        return $ret;
    }
    $day_next = $days[++$idx === count($days)? 0: $idx];
    return array_merge($ret, get_next_days($day_next, $count));
}
echo implode(", ", get_next_days('Fri', 3)); // Fri, Sat, Sun
echo implode(", ", get_next_days('Sat', 3)); // Sat, Sun, Mon
echo implode(", ", get_next_days('Sat', 8)); // Sat, Sun, Mon, Tue, Wed, Thu, Fri, Sat
Answer 2

Ну вы ребята даете ))

function get_next_days($day_now, $count, $format = 'D') // можно передать Mon, Monday, Today etc.
{
    if(!($day_now = strtotime($day_now))) {
        return false; // если нам непонятно что пришло возвращаем ошибку
    }
    $days = [date($format,$day_now)];
    for ($i = 1; $i < $count; $i++) { 
        $day_now = strtotime('tomorrow',$day_now);
        $days[] = date($format,$day_now);
    }
    return implode(', ', $days);
}
Answer 3

Буду очень благодарен за примеры или готовую функцию

Есть готовый класс DateTime:

$next_days = get_next_days('Fri', 3);
echo $next_days;
function get_next_days($day_now, $count): String
{
    $days = [];
    for ($i = 0; $i < $count; $i++) { 
        $days[] = (new DateTime("$day_now +$i days"))->format('D');
    }
    return join(', ', $days);
}

Результат:

Fri, Sat, Sun

UPD: Вариант для возврата массива:

$next_days = get_next_days('Fri', 3);
print_r($next_days);
function get_next_days($now, $count, $days = []): Array
{
    for ($i = 0; $i < $count; $i++) {
        $days[] = (new DateTime("$now +$i days"))->format('D');
    }
    return $days;
}

Результат:

Array
(
    [0] => Fri
    [1] => Sat
    [2] => Sun
)
READ ALSO
Маршруты не работают PHP-MVC

Маршруты не работают PHP-MVC

Друзья у меня несколько вопросов по этой темеСайт должен работать на нескольких языков (Английском , Русском и на Польском)

153
Оптимизировать функцию

Оптимизировать функцию

Выполняю код

145
Безопасная загрузка WORD файла. Теория. PHP

Безопасная загрузка WORD файла. Теория. PHP

мой вопрос теоретическийВеб-приложение будет работать только с Word файлами (буду делать в учебных для меня целях СЭД) и загрузить-то с проверкой...

125
Отправка писем через PHPMailer и AJAX

Отправка писем через PHPMailer и AJAX

Всем привет! Не получается сделать отправку писем на сайте через AJAXНажимаю на кнопку отправить и ничего не происходит

128