2014-10-26 30 views
0

我想從& _POST [「finalmonth」]獲取一個月的數值版本,並將其轉換爲月的文本版本。例如:01 = 1月。否則如果從月份的數值版本的月的文本版本的聲明

當我使用if語句:

if ($_POST["finalmonth"]=01){ 
    $textmonth="January"; 
    } 
echo $textmonth; 

它工作得很好。不過,我需要這對所有個月的工作,所以我嘗試,如果elseif的語句無果:

if ($_POST["finalmonth"]=01){ 
    $textmonth="January"; 
    } elseif ($_POST["finalmonth"]=02){ 
    $textmonth="February"; 
    } elseif ($_POST["finalmonth"]=03){ 
    $textmonth="March"; 
    } elseif ($_POST["finalmonth"]=04){ 
    $textmonth="April"; 
    } elseif ($_POST["finalmonth"]=05){ 
    $textmonth="May"; 
    } elseif ($_POST["finalmonth"]=06){ 
    $textmonth="June"; 
    } elseif ($_POST["finalmonth"]=07){ 
    $textmonth="July"; 
    } elseif ($_POST["finalmonth"]=08){ 
    $textmonth="August"; 
    } elseif ($_POST["finalmonth"]=09){ 
    $textmonth="September"; 
    } elseif ($_POST["finalmonth"]=10){ 
    $textmonth="October"; 
    } elseif ($_POST["finalmonth"]=11){ 
    $textmonth="November"; 
    } elseif ($_POST["finalmonth"]=12){ 
    $textmonth="December"; 
    } 

回聲$ textmonth;只返回1的值而沒有其他值。

不知道我在做什麼錯。

更新:感謝所有幫助。我已經嘗試了geoandri的switch方法,它可以正常工作,我可能會像Cheery所說的那樣使用一個數組。再次感謝。

+0

檢查switch語句。較簡單。看看http://php.net/manual/en/control-structures.switch.php – geoandri 2014-10-26 18:58:04

+1

你有這麼多的問題在這裏..你是否偶然打開任何有關PHP的教科書至少一次?條件只使用'==',而不是'='。 '05'是'5',但是你從表單中得到的東西總是一個字符串,所以需要引號。這裏你不需要'if ... then',簡單的關聯數組就可以解決所有的問題。 – Cheery 2014-10-26 18:58:11

+0

@geoandri謝謝。這應該有所幫助。 – 2014-10-26 19:00:13

回答

3
$names = array(
'01' => 'January', 
'02' => 'February', 
'03' => 'March', 
'04' => 'April', 
'05' => 'May', 
'06' => 'June', 
'07' => 'July', 
'08' => 'August', 
'09' => 'September', 
'10' => 'October', 
'11' => 'November', 
'12' => 'December' 
); 

if (!isset($names[$_POST["finalmonth"]])) 
    echo 'Unknown month'; 
else 
    echo $names[$_POST["finalmonth"]]; 

正如我在評論中寫道,=是賦值,邏輯比較是==。你也從表單中獲取字符串,而不是整數。給出數組只是爲了展示這個想法,它可以用於許多其他目的。

ps:上面的代碼假設,如您的示例所示,您實際上是從01,02等發送的。如果您提交1,2鍵應該相應地修改或刪除,因爲數字數組從0到11開始,您可以從表單中發送相應的索引。

+0

這將失敗。 $ _POST [「finalmonth」]將被視爲一個整數,因此03將評估爲3,這在數組中找不到。 – Ali 2014-10-26 19:09:41

+1

@Ali'將被視爲一個整數'你永遠不會從表單中得到整數,只有字符串。如果他發送了他的例子中列出的'03',它將起作用 - 我不知道他實際上從表單發送了什麼。 – Cheery 2014-10-26 19:10:20

+0

是的,我糾正了。謝謝。 – Ali 2014-10-26 19:12:28

3

創建一個包含所有月份名稱的數組,並使用月份ID作爲要引用的數組中的索引。另外,您正在使用錯誤的比較運算符。你想用==

+0

現在就來看看吧。謝謝。 – 2014-10-26 19:02:40

1

我建議使用日期時間來解決這些問題,它真的只是使用

$month = 3; 
$dt = DateTime::createFromFormat('!m', $month); 
echo $dt->format('F'); // March 

DEMO

0

這是有點難看,但 echo date('F',strotime("2014-$_POST[finalmonth]-01"))

日期函數返回月份的全稱(通過發送'F')到我們連接 的日期,正如我所說的那樣,它很醜但是可以工作

1

你在那裏做的是將值賦給你的變量,而不是檢查。

您需要使用==或===來執行驗證操作 - 否則您會進入切換大小寫。另一種方法是變量。

例與==:

if ($_POST["finalmonth"]==01){ 
$textmonth="January"; 
} elseif ($_POST["finalmonth"]==02){ 
$textmonth="February"; 
} elseif ($_POST["finalmonth"]==03){ 
$textmonth="March"; 
} elseif ($_POST["finalmonth"]==04){ 
$textmonth="April"; 
} elseif ($_POST["finalmonth"]==05){ 
$textmonth="May"; 
} elseif ($_POST["finalmonth"]==06){ 
$textmonth="June"; 
} elseif ($_POST["finalmonth"]==07){ 
$textmonth="July"; 
} elseif ($_POST["finalmonth"]==08){ 
$textmonth="August"; 
} elseif ($_POST["finalmonth"]==09){ 
$textmonth="September"; 
} elseif ($_POST["finalmonth"]==10){ 
$textmonth="October"; 
} elseif ($_POST["finalmonth"]==11){ 
$textmonth="November"; 
} elseif ($_POST["finalmonth"]==12){ 
$textmonth="December"; 
} 

我只是想知道你爲什麼不使用mktime的混合,這裏的日期函數。

0

使用此代碼

<?php 

if (isset($names[$_POST["finalmonth"]])){ 
$months = array( //create array of month 
'01' => 'January', 
'02' => 'February', 
'03' => 'March', 
'04' => 'April', 
'05' => 'May', 
'06' => 'June', 
'07' => 'July', 
'08' => 'August', 
'09' => 'September', 
'10' => 'October', 
'11' => 'November', 
'12' => 'December' 
); 
$numeric=$_POST["finalmonth"]; 

foreach($months as $key=>$month){ 
if($key == $numeric){ 
$in_numeric=$key; 
$in_word=$month; 
} 
} 
if(!empty($in_numeric) and !empty($in_word)){ 
print 'Month in number is '.$in_numeric; echo '<br/>'; 
print 'Month in Words is '.$in_word; 

} else{ print 'entered month was wrong'; } 
} 
?>