PHP的其他参数

时间:2011-09-21 06:25:27

标签: php usort

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

$GLOBAL['filter'] = $filter;
usort($this->data, function($arr1, $arr2) {
    return ($arr1[$GLOBALS['filter']] > $arr2[$GLOBALS['filter']]) ? 1 : -1;
});

我的解决方案完美无缺,但我发现它相当不优雅。有人有想法在不诉诸$ GLOBALS变量的情况下实现同一目标吗?

感谢您提出的建议

2 个答案:

答案 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中,因为它是一种常规解决方案。