以下代码位于一个本身位于类中的函数中。其目的是避免每个 $ filter 值有一个排序函数:
$GLOBAL['filter'] = $filter;
usort($this->data, function($arr1, $arr2) {
return ($arr1[$GLOBALS['filter']] > $arr2[$GLOBALS['filter']]) ? 1 : -1;
});
我的解决方案完美无缺,但我发现它相当不优雅。有人有想法在不诉诸$ GLOBALS变量的情况下实现同一目标吗?
感谢您提出的建议
答案 0 :(得分:25)
由于你使用的是匿名函数,你可以将它用作这样的闭包:
$filter = <whatever>;
usort($this->data, function($arr1, $arr2) use ($filter) {
return ($arr1[$filter] > $arr2[$filter]) ? 1 : -1;
});
答案 1 :(得分:0)
public function sortList($params, $listToSort)
{
if (!isset($listToSort) || !isset($params) || count($params) == 0) {
return $listToSort;
}
foreach ($params as $col => $value) {
$orderFlag = $value == 'asc' ? 1 : -1;
usort($listToSort, function ($a, $b) use ($orderFlag, $col) {
return strcmp($a[$col], $b[$col]) * $orderFlag;
});
}
return $listToSort;
}
$ params上面是json,例如:{name:'asc',age:'desc'},$ listToSort是array的数组,例如:array(array('name':'Himanshu',age:22),array (“姓名”:“史蒂夫”,年龄:35))
将此代码放置在您项目的Utils.php中,因为它是一种常规解决方案。