我正在执行以下代码post:
preg_match_all("/'(.+)' ((\w+)\(? ?(\d*) ?\)?)/", $sql, $_matches, PREG_SET_ORDER);
$matches = array_map(function($v) {return array(trim($v[2]), $v[1]);}, $_matches);
但我收到以下错误:
Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in SqlParser.php on line 29
我花了一些时间来解决这个问题,但我无法找到解决方案。
有人可以告诉我出了什么问题吗?
答案 0 :(得分:2)
除非你使用的是php 5.3,否则你不能使用这样的匿名函数。根据{{3}},
从PHP 5.3.0开始,也可以 将闭包传递给回调 参数。
您可以使用the php documentation for callbacks代替创建匿名。函数,这将在PHP 5.3之前工作。或者使用GWW的答案,这也应该有用。
否则,如果您有兴趣了解更多关于anon的信息。 PHP 5.3+中的函数,您可以阅读create_function()
。
答案 1 :(得分:2)
我假设你使用的是低于5.3的PHP版本,它不支持闭包(你在评论中确认了这一点)。下面的代码应该有效。我刚刚将匿名函数转换为普通函数。
function map_cb($v){
return array(trim($v[2]), $v[1]);
}
preg_match_all("/'(.+)' ((\w+)\(? ?(\d*) ?\)?)/", $sql, $_matches, PREG_SET_ORDER);
$matches = array_map("map_cb", $_matches);