【问题标题】:PHP: Echoing date via german array causes errorPHP:通过德语数组回显日期会导致错误
【发布时间】:2018-03-19 17:26:57
【问题描述】:

所以我得到了这个数组,其中包含每个月数的德语等值词(不带前导零):

$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");

现在我正在获取 3 天前的月份:

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

在 $months 中回显 $german 的值会产生错误:

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),但这也没有用。

【问题讨论】:

    标签: php arrays date echo


    【解决方案1】:

    在您的关联数组中,您需要用引号将键括起来。

    示例:

    $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"

    【讨论】:

    • 两种解决方案都不适合我 :( 它们会导致相同的错误。我应该用echo $months(date("n", strtotime("-3 days"))); 更改某些内容吗?
    • 这个答案没有解决问题中暴露的问题。
    【解决方案2】:

    $months 是一个数组,而不是一个函数。引用数组中的元素时,必须使用[] 而不是()(用于调用函数或方法)。

    echo $month[$german];
    

    应该可以工作,而$month($german) 尝试调用存储在变量$month 中的函数。

    【讨论】:

      【解决方案3】:

      回声 $month($german);

      这段代码有两个问题。

      次要的是变量$month不存在,包含德国月份名称的数组名为$months。错误消息中也有关于此问题的提示。它说“函数名必须是字符串”。它不是一个字符串,它是未定义的。

      如果您启用报告解释器在运行代码时报告的所有错误、警告和通知,则很容易发现此问题。检查您的php.ini 并确保error_reporting 行显示为:

      error_reporting = E_ALL
      

      有了这个设置,echo $month($german); 行将通知报告为 “通知:未定义变量:文件 X 的 Y 行上的月份”“函数名称必须是字符串”之前/em> 致命错误。

      第二个错误是在$months() 不是函数而是数组时将其作为函数调用。正确的用法是:

      echo $months[$german];
      

      【讨论】:

        猜你喜欢
        • 2010-12-15
        • 2019-06-11
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多