简短版本:我希望在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;
我试过的其他事情 - $ m == array(01,03,05,07,09) $ m ==(%2) - 偶数个月 我试过移动我的&#39;围绕整个事情,添加和减去()。我的最终结论是 - 无论出于何种原因 - 它不是在倾听&#34;到了这个月。就像现在它应该说&#34;冬天&#34;但它一直在阅读&#34;夏天,&#34;这是1 - 15日期(正确)但错误的月份。
有什么建议吗?
答案 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';
}
希望这有帮助。