PHP附加参数到usort

PHP附加参数到usort,php,usort,Php,Usort,下面的代码位于函数中,而函数本身位于类中。其目的是避免每$filter值有一个排序函数: 我的解决方案非常有效,但我觉得它相当不雅观。如果不使用$GLOBALS变量,有人会有实现相同目标的想法吗 感谢您的建议因为您使用的是匿名函数,所以您可以将其作为闭包使用,如下所示: $filter = <whatever>; usort($this->data, function($arr1, $arr2) use ($filter) { return ($arr1[$filter

下面的代码位于函数中,而函数本身位于类中。其目的是避免每$filter值有一个排序函数:

我的解决方案非常有效,但我觉得它相当不雅观。如果不使用$GLOBALS变量,有人会有实现相同目标的想法吗


感谢您的建议

因为您使用的是匿名函数,所以您可以将其作为闭包使用,如下所示:

$filter = <whatever>;
usort($this->data, function($arr1, $arr2) use ($filter) {
    return ($arr1[$filter] > $arr2[$filter]) ? 1 : -1;
});
$filter=;
usort($this->data,function($arr1,$arr2)use($filter){
返回($arr1[$filter]>$arr2[$filter])?1:-1;
});
上面$params是json,例如:{name:'asc',age:'desc'},$listToSort是数组的数组,例如:array(array('name':'Himanshu',age:22),array('name':'Steve',age:35))

将此代码放在项目的Utils.php中,因为它是一个通用解决方案


谢谢,这正是我需要的!我应该早一点研究闭包……这是解决我问题的完美答案。非常感谢。
$filter = <whatever>;
usort($this->data, function($arr1, $arr2) use ($filter) {
    return ($arr1[$filter] > $arr2[$filter]) ? 1 : -1;
});
   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;
}