2017-10-08 26 views
3

所以從來就得到了這個數組,其中包含每月數德國equivilant字(無前導零):PHP:通過德國陣列相呼應日期導致錯誤

$months= array(1=>"Januar", 
       2=>"Februar", 
       3=>"März", 
       4=>"April", 
       5=>"Mai", 
       6=>"Juni", 
       7=>"Juli", 
       8=>"August", 
       9=>"September", 
       10=>"Oktober", 
       11=>"November", 
       12=>"Dezember"); 

現在I'm獲取的3個月天前:

$german = date("n", strtotime("-3 days")); 

呼應$ $在德國幾個月的值會產生一個錯誤:

echo $month($german); 

錯誤消息:

Fatal error: Function name must be a string in X on line X 

獨自回聲$german不會產生錯誤。
回聲$months(date("n", strtotime("some $row value from database")))不會產生錯誤。
有什麼問題?
我已經試過這樣做:echo $months((int)$german),但這也沒有工作。

回答

1

$months是一個數組,而不是一個函數。引用數組中的元素時,必須使用[]而不是()(用於調用函數或方法)。

echo $month[$german]; 

應該工作,而$month($german)試圖調用存儲在變量$month的功能。

2

在您的關聯數組中,您需要用引號括住這些鍵。

例子:

$months = array("1" => "Januar", 
       "2" => "Februar", 
       "3" => "März", 
       "4" => "April", 
       "5" => "Mai", 
       "6" => "Juni", 
       "7" => "Juli", 
       "8" => "August", 
       "9" => "September", 
       "10" => "Oktober", 
       "11" => "November", 
       "12" => "Dezember"); 

再思考:

因爲你的鑰匙是數字,你可以放棄一個關聯數組,只需使用一個索引數組:

$months = array("Neujahr", 
       "Januar", 
       "Februar", 
       "März", 
       "April", 
       "Mai", 
       "Juni", 
       "Juli", 
       "August", 
       "September", 
       "Oktober", 
       "November", 
       "Dezember"); 

從此索引陣列:

  • array_search("Oktober", $months)給出10
  • $months[6]給出"Juni"
+0

這兩種解決方案都不適合我:(他們會導致同樣的錯誤我應該用'echo $ months(date(「n」,strtotime(「 - 3 days」 )));'? – SearchingSolutions

+0

這個答案沒有解決問題中暴露的問題。 – axiac

0

echo $month($german);

這段代碼有兩個問題。

小一個是變量$month不存在,包含月份德文名稱的數組被命名爲$months。錯誤消息中也有關於此問題的提示。它說「函數名稱必須是字符串」。它不是一個字符串,它是未定義的。

如果啓用報告所有錯誤,警告並在運行代碼時通知解釋器報告,則可能很容易發現此問題。檢查php.ini並確保error_reporting行讀取:在「功能之前,「一個月文件X上線Y注意:未定義的變量」

error_reporting = E_ALL 

有了這一套,行echo $month($german);報告的通知爲名稱必須是字符串「致命錯誤。

第二個錯誤是$months()作爲函數的調用,它不是函數而是數組。正確的用法是:

echo $months[$german];