2016-09-06 216 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,你可以發佈錯誤? –