2016-09-06 209 views
0

简短版本:我正在寻找在if/then语句中创建所有需要满足的条件。其中一个条件是数组。 问题:它忽略了我的最终条件/数组。带数组的多个if/then语句(php)

长篇故事:我用奇怪的日历系统运行游戏,看到: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 ==阵列(01,03,05,07,09) $ M = =(2%) - 为偶数数月 我试着移动我的'围绕整个事情,加入和减去()。我的最终结论是 - 无论出于何种原因 - 它不是“聆听”这个月。就像现在它应该说“冬天”,但它一直在阅读“夏天”,这是1月15日(正确)但错误的月份。

有什么建议吗?

+1

确定'($ m =='01'或'03'或'05'或'07'或'09'或'11')'? –

+0

这是我最近的尝试,目前它正在吐出“夏天”,尽管它应该说“冬天”。 –

+0

你也可以使用'in_array($ m,array('01','03',...))' –

回答

-1

您已经忘记else声明。

,但目前检查日期是15上述1。所以你的例程不适用于像15, 16, 18, 19, 23, 24, 31这样的日期。

你要操作改变>>=,所以你将检查日期是高于或等于的如果。

例如您的旧代码:

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

希望这有助于。

+0

这似乎奏效了 - 谢谢! –

+0

@CourtneyDeer我更新了我的解决方案。你也需要'()'月份日期。 如果这对你有帮助,请记住点赞并接受答案。 –

+0

最初它似乎工作,但现在它是9月16日它不显示任何东西。回到原来的位置:( –

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; 

希望它有帮助。

+0

这似乎已经崩溃了我的整个代码:( –

+0

@CourtneyDeer,你可以发布错误? –