PHP要使用usort的附加参数

问题描述 投票:7回答:2

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

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

我的解决方案工作得很好,但是我觉得它不太雅致。有人会想到不使用$ GLOBALS变量就能达到相同的目标吗?

感谢您的主张

php usort
2个回答
26
投票

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

$filter = <whatever>;
usort($this->data, function($arr1, $arr2) use ($filter) {
    return ($arr1[$filter] > $arr2[$filter]) ? 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( 'name':'Steve',年龄:35))

将此代码放置在您的项目的Utils.php中,因为它是一般的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.