PHP функция для отображения различных изображений в зависимости от дня месяца и часа дня - PullRequest
0 голосов
/ 21 февраля 2019

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

       <?php
    $h = date('G'); //set variable $h to the hour of the day
    $d = date('d'); //set variable $d to the day of the month.
    //G is the date key for hours in 24 format (not 12), with no leading 0s, like 02.
    // Adjust offset code if needed $h = $h-2;


    // 01 Calendar Day 
    if ($d = 01 && $h >= 4 && $h < 12) $img = 'img/s1.jpg'; //if day is 1st and it's between 4am and 12pm show day strength 1 image
    else if ($d == 01 && $h >= 12 && $h < 2) $img = 'img/c1.jpg'; //if day is 1st and it's between 12pm and 2am show evening condition 1 image
    else if ($d == 01 && $h >= 2 && $h < 4) $img = 'img/rest.jpg'; //if day is 1st and it's between 2am and 4am show rest image


    ?>
<img src="/<?php echo $img; ?>">

Цель состоит в том, чтобы создать операторы if / else для всех 31 возможных дней в месяце, где есть утреннее изображение,вечернее изображение и буферное изображение, которое отображается поздней ночью в виде буфера.

Но когда я проверяю код, чтобы увидеть, работает ли он, я получаю ошибки.Пожалуйста, помогите, а также, если есть более эффективный способ кодирования этого стиха 31, если бы / операторы else были бы замечательными.

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Попробуйте,

$h = date('G'); //set variable $h to the hour of the day
//G is the date key for hours in 24 format (not 12), with no leading 0s, like 02.
$d = date('d'); //set variable $d to the day of the month.
$DynamicDay = '21';
if ($DynamicDay == $d) {
    switch ($h) {
        case ($h >= 4 && $h < 12):
            $img = 'img/s' . $d . '.jpg';
            break;
        case ($h >= 12 && $h < 14):
            $img = 'img/c1.jpg';
            break;
        case ($h >= 14 && $h < 18):
            $img = 'img/rest.jpg';
            break;
        default:
            break;
    }
}
echo 'Hour => '.$h.'<p>';
echo 'day => '.$d.'<p>';
echo $img;
die;

Out Put:

Hour => 10

day => 21

img/s21.jpg
0 голосов
/ 21 февраля 2019

Вместо нескольких if / else вы можете поместить все правило в массив для простоты обслуживания.

$array = [
    1 => [
        4 => 'img/s1.jpg',
        12 => 'img/s12.jpg',
        14 => 'img/s14.jpg',
    ],
    2 => [
        2 => 'img/c2.jpg'
    ]
];
function getDayDateImage($array, $d, $h)
{
    while (!$array[$d][$h]) {
        $h--;
        if ($h < 0) {
            $h = 23;
            $d--;
        }
        if ($d < 1) {
            return 'img/rest.jpg'; // Default
        }
    }
    return $array[$d][$h];
}

echo getDayDateImage($array, 1, 1); // Get img/rest.jpg
echo getDayDateImage($array, 1, 13); // Get img/s12.jpg
echo getDayDateImage($array, 2, 1); // Get img/s14.jpg
echo getDayDateImage($array, 2, 4); // Get img/c2.jpg
//Just pass you $d and $h 
//getDayDateImage($array, $d, $h);

Надеюсь, что это поможет.

0 голосов
/ 21 февраля 2019

Вам не нужно применять дневное условие, так как ваше изображение не меняет базис в день.Это меняется во времени.Таким образом, вы можете использовать что-то вроде ниже:

$h = date('H'); // it will return hour in 24 format.


if ($h >= 4 && $h < 12) $img = 'img/s1.jpg'; //if it's between 4am and 12pm show day strength 1 image
    else if ( ($h >= 12 && $h <= 23) || ($h >= 1 && $h <= 2)  ) $img = 'img/c1.jpg'; //it's between 12pm and 2am show evening condition 1 image
    else if ($h >= 2 && $h < 4) $img = 'img/rest.jpg'; //if it's between 2am and 4am show rest image

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

$h = date('H'); // it will return hour in 24 format.
$d = date('d');     
    if ($h >= 4 && $h < 12) $img = 'img/s'.$d.'.jpg'; 
    else if ( ($h >= 12 && $h <= 23) || ($h >= 1 && $h <= 2)  ) $img = 'img/c'.$d.'.jpg'; 
    else if ($h >= 2 && $h < 4) $img = 'img/rest.jpg'; 

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...