2017-10-08 69 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];