我有一个函数从数组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服务器,它与它有什么关系吗?
答案 0 :(得分: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本身在版本之间也有不同的功能。