сделать то же самое, написав меньше кода

У меня есть следующий код

$day = $_GET['day'];

$month = $_GET['month'];

if($day=='1'&&$month=='January'){
echo "<img src=\"playingCard/spades/13.png\" alt='' />";
} elseif ($day=='2'&&$month=='January'){
echo "<img src=\"playingCard/spades/12.png\" alt='' />";
} elseif ($day=='3'&&$month=='January'||$day=='1'&&$month=='February'){
echo "<img src=\"playingCard/spades/11.png\" alt='' />";
} elseif ($day=='4'&&$month=='January'){
echo "<img src=\"playingCard/spades/10.png\" alt='' />";
} ....

и есть форма, где вы можете ввести число для дня и значение для месяца.
То, что я хотел бы сделать, это показать конкретную игральную карту на определенную дату.
Например

January 1st = king of spades
January 2nd = Queen of spades
February 1st = Jack of spades
and so on

У меня есть папка, в которой я сохранил 4 подпапки с изображениями четырех карт игральных карт.

Пока код работает, но он будет очень длинным, если делать 365 дней, есть ли простой способ сделать это с меньшим количеством кода?

Надеюсь, я был достаточно ясен.

Заранее спасибо.

0

Решение

Как уже отмечали другие, без шаблона трудно дать идеальный ответ … но если вы хотите перебирать колоду снова и снова с на первый взгляд случайным, но предсказуемым порядком, вы можете использовать mod (%) с переключателем Постулаты:

//get numerical day of the year
$dayofyear = date('z', mktime(12, 0, 0, $month, $day, date('Y')));
$suit = '';

//will result in 1 on jan-1, 2 on jan-2, up to 13, then back to 1.
$card = ($dayofyear % 13) + 1;
$nSuit = ($dayofyear % 4) + 1;

switch ($nSuit) {
case 1:
$suit = 'spades';
break;
case 2:
$suit = 'hearts';
break;
case 3:
$suit = 'clubs';
break;
case 4:
$suit = 'diamonds';
break;
}

echo "<img src=\"playingCard/" . $suit . "/" . $card . ".png\" alt='' />";

это приведет к

spades    1
hearts    2
clubs     3
diamonds  4
spades    5
hearts    6
clubs     7
diamonds  8
spades    9
hearts   10
clubs    11
diamonds 12
spades   13
hearts    1
clubs     2
diamonds  3
1

Другие решения

У меня нет удобного интерпретатора PHP, но это должно дать вам общее представление (или это может сработать после минимального редактирования):

$day = $_GET['day'];

$month = $_GET['month'];

$images = array (
"January" => array ( 1 => "path to image", 2 => "path to another image", ... ),
"February" => array ( 1 => "path to image", 2 => "path to another image", ... ),
...
);

echo $images[$month][$day];

$images переменная может быть перемещена в отдельный .php файл и все это будет выглядеть примерно так (назовите файл, как вы хотите):

months_initialiser.php:

<?php
$images = array (
"January" => array ( 1 => "path to image", 2 => "path to another image", ... ),
"February" => array ( 1 => "path to image", 2 => "path to another image", ... ),
...
);
?>

Ваш фактический файл:

<?php
$day = $_GET['day'];

$month = $_GET['month'];

include 'months_initialiser.php';

echo $images[$month][$day];
?>
3

Если вы не можете определить обычный шаблон, для которого должна отображаться карта, вы можете поместить пути к файлам изображений в массив из 366 элементов, а затем использовать день года индексировать массив.

если ты Можно определить регулярный шаблон, вам нужен только массив из 52 элементов, а затем принять $day_of_year % 52 чтобы получить индекс. (Это было бы намного меньше кода для определения массива, но из вашего примера не похоже, что у вас есть обычный шаблон.)

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector