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

带有数组的多个if/then语句(php),php,arrays,Php,Arrays,简短版本:我希望在if/then语句中创建多个需要满足的条件。其中一个条件是数组。 问题:它忽略了我的最终条件/数组 长话短说:我用一个奇怪的日历系统运行一个游戏,见:。我试着在左边写一些东西,上面写着“当前季节”,把当前季节吐出来。我在理解“月份”时遇到了很多问题 $d=日期('d'); $m=日期('m'); $季节=''; 如果($d>'1'&&$d'16'&&$d'19'&&$d'24'&&$d'1'&&$d'16'&&$d'19'&&$d'24'&&$d=1&&$d=16&&&$d=

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

长话短说:我用一个奇怪的日历系统运行一个游戏,见:。我试着在左边写一些东西,上面写着“当前季节”,把当前季节吐出来。我在理解“月份”时遇到了很多问题

$d=日期('d');
$m=日期('m');
$季节='';
如果($d>'1'&&$d<'15'&($m=='01'或'03'或'05'或'07'或'09'或'11')){
$季节='冬季';
}如果($d>'16'&&$d<'18'&($m=='01'或'03'或'05'或'07'或'09'或'11')){
$季节='春天';
}如果($d>'19'&&$d<'23'&($m=='01'或'03'或'05'或'07'或'09'或'11')){
$季节='春天,出生';
}如果($d>'24'&&$d<'31'&($m=='01'或'03'或'05'或'07'或'09'或'11')){
$季节='春天';
}如果($d>'1'&&$d<'15'&&($m=='02'或'04'或'06'或'08'或'10'或'12')){
$季节='夏季';
}如果($d>'16'&&$d<'18'&&($m=='02'或'04'或'06'或'08'或'10'或'12')){
$季节='秋天';
}如果($d>'19'&&$d<'23'&($m=='02'或'04'或'06'或'08'或'10'或'12')){
$季节='秋季,繁殖';
}如果($d>'24'&&$d<'31'&($m=='02'或'04'或'06'或'08'或'10'或'12')){
$季节='秋天';

}
您忘记了
else
语句

您当前检查日期是否在
1
上方和
下方。因此,您的例行程序在像
15、16、18、19、23、24、31这样的日期不起作用

您必须将运算符
更改为
=
,以便检查日期是否高于或等于if

例如,您的旧代码:

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';
}
$d=日期('d');
$m=日期('m');
$季节='';
$winterMonths=数组(1,3,5,7,9,11);
$summermonds=数组(2,4,6,8,10,12);

如果($d>=1&&$d=16&&&$d=19&&$d=24&&&$d=1&&$d=16&&&$d=19&&$d=24&$d首先,您的第一个表达式将始终返回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
您可以在数组中使用

这是您需要的代码

<?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;

确定
($m=='01'或'03'或'05'或'07'或'09'或'11')
?这是我最近的一次尝试,它目前正在吐出“summer”,尽管它应该是“winter”。你也可以在数组中使用
($m,array('01','03',…)
@courtneyder我更新了我的解决方案。你需要
()
月份日期也一样。如果这对您有帮助,请记住向上投票并接受答案。最初它似乎有效,但现在是9月16日,它没有显示任何内容。回到原点:(@courtneyder我再次更新了我的答案。请检查这是否对你有帮助。非常感谢!我昨晚也意识到了这一点,而且这似乎起到了作用。但是,我没有使用$wintermonths,因为它破坏了整个代码。我知道MyBB非常芬尼基。我感谢你再看一眼!