【发布时间】:2011-08-23 10:16:48
【问题描述】:
我有一个数组排序函数如下:
public function sortAscending($accounts)
{
function ascending($accountA, $accountB) {
if ($accountA['AmountUntilNextTarget'] == $accountB['AmountUntilNextTarget']) {
return 0;
}
return ($accountA['AmountUntilNextTarget'] < $accountB['AmountUntilNextTarget']) ? -1 : 1;
}
usort($accounts, $ascending);
return $accounts;
}
显然这并不理想,因为它对要搜索的键进行了硬编码。我想我会通过将密钥作为参数传递给外部函数来使其通用,但是这超出了内部函数的范围。我试图通过使用可以访问参数的闭包而不是内部函数来解决这个问题,如下所示:
public function sortAscending($accounts, $key)
{
$ascending = function($accountA, $accountB) {
if ($accountsA[$key] == $accountB[$key]) {
return 0;
}
return ($accountA[$key] < $accountB[$key]) ? -1 : 1;
}
usort($accounts, $ascending);
return $accounts;
}
但是 usort() 只接受一个函数名,所以这不起作用。谁能看到(更好的?)实现这一目标的方法?
【问题讨论】:
-
usort接受一个callback参数,它可以是一个闭包。代码中明显的错误是函数定义后缺少;。也许这就是错误的原因。 -
除了缺少
;,$key也不在你的关闭范围内。你应该使用它:$ascending = function($acciontA, $accountB) use($key) { ...
标签: php arrays sorting closures usort