【问题标题】:syntax error when live but not on testing server实时但不在测试服务器上时出现语法错误
【发布时间】:2012-12-19 14:59:25
【问题描述】:

我有一个函数可以从数组 kay 中去除下划线并用空格替换它以便插入数据库。

当它在他的测试服务器上运行时,它运行良好,但是当它运行时,它会在第 22 行报告一个语法错误——期待一个 ")"。

函数如下:

function fixArrayKey(&$arr)
{
    $arr=array_combine(array_map(function($str){return str_replace("_"," ",$str);},array_keys($arr)),array_values($arr));
    foreach($arr as $key=>$val)
    {
        if(is_array($val)) fixArrayKey($arr[$key]);
    }
}

第 22 行是 $arr=array_combine 开始的地方。

在我的一生中,我看不出它哪里出了问题,甚至无法理解为什么它在本地服务器上工作,但在现场服务器上却不行。

我的实时服务器是一个 IIS7 服务器,这和它有什么关系吗?

【问题讨论】:

  • PHP 5.3 中添加了匿名函数,您的实时服务器上是否有早期版本?

标签: php function syntax


【解决方案1】:

如果你把它简化一点,你可能会发现错误所在

function fixArrayKey(&$arr)
{
    $keys   = array_keys($arr));
    $values = array_values($arr);

    // Try without the lambda function
    $map = array_map('lambda_replace', $keys);

    // Or you can uncoment the line below (and comment the one above) to use
    // the lambda function
    //$map = array_map(function($str){return str_replace("_"," ",$str);}, $keys);

    $arr = array_combine($map, $values);

    foreach ($arr as $key=>$val)
    {
        if(is_array($val)) fixArrayKey($arr[$key]);
    } 
}

function lambda_replace($str)
{
    return str_replace('_', ' ', $str);
}

一个好主意是在开发和生产环境中都使用phpinfo() 来确定它们之间的任何差异。例如 PHP 上的模块在不同版本上的行为不同,甚至 PHP 本身在不同版本之间也有不同的特性。

【讨论】:

  • 我的 windows 主机只有 php 5.2 而我的本地是 5.3 ...这似乎是问题
猜你喜欢
  • 2012-06-05
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多