【发布时间】:2012-05-31 01:40:24
【问题描述】:
我之前从未在 PHP 中使用过匿名函数,但我发现了一段代码使用匿名函数来对对象进行排序
usort($numTurnsPerUser,build_sorter('turns'));
function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
此代码将按键对对象进行排序(我传入“turns”)。例如,一个看起来像这样的对象:(用 JSON 编写,只是为了便于阅读)
$numTurnsPerUser = {
"31":{
"turns":15,
"order":0
}, "36":{
"turns":12,
"order":1
}, "37":{
"turns":14,
"order":2
}
}
将被排序为如下所示的对象:
$numTurnsPerUser = {
"36":{
"turns":12,
"order":1
}, "37":{
"turns":14,
"order":2
}, "31":{
"turns":15,
"order":0
}
}
这在运行 PHP 5.3.0 的本地服务器上运行良好,但在运行“php5”的在线服务器上却无法运行——除此之外我找不到任何信息。我收到一个错误
解析错误:语法错误,意外的 T_FUNCTION
我读到 PHP
【问题讨论】:
-
让我们假装
create_function从未存在过...然而,正如所指出的(或发现的?),这是 PHP 5.3+ only 功能。在 PHP 5.2.999 及之前版本中预期会出现语法错误。我希望标题编辑能给这个更多方向。快乐编码:) -
@pst 如果除了
create_function之外还有更好的方法来定义这个函数 - 我就是不能使用匿名函数 -
stackoverflow.com/questions/10590877/… 它没有显示“闭包”,但是...查看输入如何是字符串。 (我无法想象这在更大范围内会很好,所以也许创建一个类并使用一个方法作为比较器“可调用”?)
-
以及如何使用(n 对象绑定)方法作为回调:stackoverflow.com/questions/2838197/…
-
"正在运行 "php5" - 我找不到除此之外的任何信息。"您可以通过在命令行上运行
php --version来查找版本。或者在您的 PHP 脚本代码中,输入phpinfo();将打印出大量有关您的 PHP 安装的信息
标签: php sorting anonymous-function