all*_*arn 5 php sorting anonymous-function
我以前从未在PHP中使用过匿名函数,但是我发现了一段代码,它使用一个代码来排序对象
usort($numTurnsPerUser,build_sorter('turns'));
function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
Run Code Online (Sandbox Code Playgroud)
此代码将通过键对对象进行排序(我传入"turn").例如,一个看起来像这样的对象:(用JSON编写,只是为了便于阅读)
$numTurnsPerUser = {
"31":{
"turns":15,
"order":0
}, "36":{
"turns":12,
"order":1
}, "37":{
"turns":14,
"order":2
}
}
Run Code Online (Sandbox Code Playgroud)
将被分类为如下所示的对象:
$numTurnsPerUser = {
"36":{
"turns":12,
"order":1
}, "37":{
"turns":14,
"order":2
}, "31":{
"turns":15,
"order":0
}
}
Run Code Online (Sandbox Code Playgroud)
这在我的运行PHP 5.3.0的本地服务器上运行良好,但它无法在我的在线服务器上运行,运行"php5" - 我无法找到除此之外的任何信息.我收到了一个错误
解析错误:语法错误,意外T_FUNCTION
我读到PHP <5.3不能使用匿名函数,必须使用create_function,但匿名函数的"use"部分让我难以理解.有人可以向我解释一下该功能的"使用"部分是什么,或者更好的是,我如何将其"翻译"到所需的create_function参数?
你可以这样做:
Class Sorter {
private $key;
public function __construct($key) {
$this->key = $key;
}
public function sort($a, $b) {
return strnatcmp($a[$this->key], $b[$this->key]);
}
}
usort($numTurnsPerUser, array(new Sorter('key_b'), 'sort'));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |