带有数组的多个if / then语句(php)

时间:2016-09-06 07:27:11

标签: php arrays

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

长篇故事:我用一个奇怪的日历系统运行游戏,看到:http://www.beqanna.com/forum/bqcalendar.php。我试图在左侧有一些东西,它说的是#34;当前的季节"吐出当前的季节。我在理解"月"。

方面遇到了很多问题



$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';
}
&#13;
&#13;
&#13;

我试过的其他事情 - $ m == array(01,03,05,07,09) $ m ==(%2) - 偶数个月 我试过移动我的&#39;围绕整个事情,添加和减去()。我的最终结论是 - 无论出于何种原因 - 它不是在倾听&#34;到了这个月。就像现在它应该说&#34;冬天&#34;但它一直在阅读&#34;夏天,&#34;这是1 - 15日期(正确)但错误的月份。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

首先,您的第一个表达式将始终返回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;

希望它有所帮助。

答案 1 :(得分:-1)

您已忘记else声明。

目前,您检查日期是 1 15下的日期。因此,您的日常工作不适用于15, 16, 18, 19, 23, 24, 31等日期。

您必须将运营商>更改为>=,这样您就可以检查日期是高于或等于到if。

例如您的旧代码:

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

如果您的日期为1,那么不会进入此状态。

新代码:

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

如果您的日期为1,那么进入此状态。

这里是完整的例程:

$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';
}

希望这有帮助。