0

我有一个函数可以从数组 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 服务器,这与它有什么关系吗?

4

1 回答 1

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 本身在不同版本中也有不同的特性。

于 2012-12-19T15:10:35.487 回答