簡體   English   中英

多個帶有數組的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)-在偶數個月中,我嘗試將我的'移動到整個事物上,並減去()。 我的最終結論是-無論出於何種原因,它都沒有“監聽”該月。 像現在一樣,它應該說“ winter”,但它始終顯示“ Summer”,這是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。

例如,您的舊代碼:

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

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM