多个if/then语句与一个数组(php)


Multiple if/then statements with an array (php)

简短版本:我希望在if/then语句中创建多个条件,这些条件都需要满足。其中一个条件是数组。问题:它忽略了我的最终条件/数组。

长话短说:我运行一个游戏与一个奇怪的日历系统,见:http://www.beqanna.com/forum/bqcalendar.php。我想在左边写着"当前季节"的地方把当前季节吐出来。我在理解"月"时遇到了很多问题。

$d = date('d');
$m = date('m');
$season = '';
If ($d > '1' && $d < '15' && ($m == '01' or '03' or '05' or '07' or '09' or '11')) {
    $season = 'Winter';
} If ($d > '16' && $d < '18' && ($m == '01' or '03' or '05' or '07' or '09' or '11')) {
    $season = 'Spring';
} If ($d > '19' && $d < '23' && ($m == '01' or '03' or '05' or '07' or '09' or '11')) {
    $season = 'Spring, Birthing';
} If ($d > '24' && $d < '31' && ($m == '01' or '03' or '05' or '07' or '09' or '11')) {
    $season = 'Spring';
} If ($d > '1' && $d < '15' && ($m == '02' or '04' or '06' or '08' or '10' or '12')) {
    $season = 'Summer';
} If ($d > '16' && $d < '18' && ($m == '02' or '04' or '06' or '08' or '10' or '12')) {
    $season = 'Autumn';
} If ($d > '19' && $d < '23' && ($m == '02' or '04' or '06' or '08' or '10' or '12')) {
    $season = 'Autumn, Breeding';
} If ($d > '24' && $d < '31' && ($m == '02' or '04' or '06' or '08' or '10' or '12')) {
    $season = 'Autumn';
}

我尝试过的其他事情-$m == array (01,03,05,07,09)$m ==(%2) -用于偶数月份我试过在整个东西周围移动我的',添加和减去()。我最后的结论是,不管出于什么原因,它并没有"倾听"这个月。就像现在它应该显示"冬天",但它一直显示"夏天",这是1-15日(正确),但错误的月份。

有什么建议吗?

首先,您的第一个表达式将始终返回true。

&& ($m == '01' or '03' or '05' or '07' or '09' or '11') 
// $m == 1 OR tru or true... and becomes false or true or true

你可以用in_array

这是你需要的代码。

<?php
$d = (int)date('d');
$m = (int)date('m');
$season = '';
//echo $d . ' ' . $m . PHP_EOL;
$winterMonths = [1,3,5,7,9,11];
$summerMonths = [2,4,6,8,10,12];
If ($d > 1 && $d < 15 && in_array($m,$winterMonths)) {
    $season = 'Winter';
} else if ($d > 16 && $d < 18 && in_array($m,$winterMonths)) {
    $season = 'Spring';
} else if ($d > 19 && $d < 23 && in_array($m,$winterMonths)) {
    $season = 'Spring, Birthing';
} else if ($d > 24 && $d < 31 && in_array($m,$winterMonths)) {
    $season = 'Spring';
} else if ($d > 1 && $d < 15 && in_array($m,$summerMonths)) {
    $season = 'Summer';
} else if ($d > 16 && $d < 18 && in_array($m,$summerMonths)) {
    $season = 'Autumn';
} else if ($d > 19 && $d < 23 && in_array($m,$summerMonths)) {
    $season = 'Autumn, Breeding';
} else if ($d > 24 && $d < 31 && in_array($m,$summerMonths)) {
    $season = 'Autumn';
}
echo $season;

希望能有所帮助。

您忘记了else语句。

并且您当前检查日期是否在 1 上面 15下面。所以你的例程对15, 16, 18, 19, 23, 24, 31这样的日期不起作用。

您必须将运算符>更改为>=,因此您将检查日期是否高于或等于

例如你的旧代码:

if ($d > 1 && ....)

如果你的日期是1,它不会进入这个If。

新代码:

if ($d >= 1 && ....)

如果你的日期是1,它进入这个If。

完整的例程如下:

$d = date('d');
$m = date('m');
$season = '';
$winterMonths = array(1,3,5,7,9,11);
$summerMonths = array(2,4,6,8,10,12);
if ($d >= 1 && $d <= 15 && in_array($m, $winterMonths)) {
    $season = 'Winter';
} else if ($d >= 16 && $d <= 18 && in_array($m, $winterMonths)) {
    $season = 'Spring';
} else if ($d >= 19 && $d <= 23 && in_array($m, $winterMonths)) {
    $season = 'Spring, Birthing';
} else if ($d >= 24 && $d <= 31 && in_array($m, $winterMonths)) {
    $season = 'Spring';
} else if ($d >= 1 && $d <= 15 && in_array($m, $summerMonths)) {
    $season = 'Summer';
} else if ($d >= 16 && $d <= 18 && in_array($m, $summerMonths)) {
    $season = 'Autumn';
} else if ($d >= 19 && $d <= 23 && in_array($m, $summerMonths)) {
    $season = 'Autumn, Breeding';
} else if ($d >= 24 && $d <= 31 && in_array($m, $summerMonths)) {
    $season = 'Autumn';
}