2

我正在执行这篇文章中的以下代码:

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

我花了一些时间来解决这个问题,但我找不到解决方案。

有人可以告诉我有什么问题吗?

4

2 回答 2

2

除非您使用的是 php 5.3,否则您不能使用这样的匿名函数。根据回调的 php 文档

从 PHP 5.3.0 开始,也可以将闭包传递给回调参数。

您可以create_function()改为使用创建匿名。函数,这将在 PHP 5.3 之前运行。或者使用 GWW 的答案,这也应该有效。

否则,如果您有兴趣了解有关 anon 的更多信息。PHP 5.3+ 中的函数,您可以阅读他们的 php 文档

于 2011-06-25T05:24:53.063 回答
2

我假设您使用的 PHP 版本低于 5.3,它不支持闭包(您在评论中确认了这一点)。下面的代码应该可以工作。我刚刚将匿名函数转换为普通函数。

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);
于 2011-06-25T05:25:52.240 回答