PHP -数组排序


PHP - Array Sorting

所以我想根据用户选择的内容对数组进行排序,我已经设法让它全部工作(与你们的一点帮助),现在我正试图清理代码。这就是我得到的

//Global Sorting Functions (For Rows to Columns)
//Function to sort up or down
function cmpdwn($a, $b) {
    return strcasecmp($a["Name"], $b["Name"]);
}
function cmpup($a, $b, $c) {
    return strcasecmp($b[$c], $a[$c]);
}
//Name Ordering Function ---------------------------------
function nameorder($data) {
    //If Up sorts Assending if Down Decending
    if ($_POST['Sortby'] == "NameDown") {
        uasort($data, "cmpdwn");
    } else {
        uasort($data, "cmpup");
    }
    $nameorder = array();
    $count = 0;
    while (list($key, $value) = each($data)) {
        $nameorder[$count] = $key;
        $count++;
    }
    return $nameorder;
}

这将为订单创建一个数组,以按名称顺序打印数据,我将对电子邮件和其他内容重复此操作。我想做的是通过将超过$a和$b放入(即$c ="名称",然后我可以放入"电子邮件"或任何//cmpup作为示例)来重用"cmp"函数。但从我所知道的一点是,这个函数是声明一个参数为wassort,我不发送变量到它。是否有办法这样做,或者它是一个反复重写函数的情况

谢谢

尝试制作对象

class MyComparator {
    private $key;
    function __construct($key) {
        $this->key = $key;
    }
    function compare($a, $b) {
        return strcasecmp($b[$this->key], $a[$this->key]);
    }
    public function setKey($key) {
        $this->key = $key;
    }
}

并使用它

$compararor = new MyComparator("Name");
usort($data, array($compararor, "compare"));


在PHP>= 5.3.0。你可以使用__invoke()方法

class MyComparator {
    private $key;
    function __construct($key) {
        $this->key = $key;
    }
    function __invoke($a, $b) {
        return strcasecmp($b[$this->key], $a[$this->key]);
    }
    public function setKey($key) {
        $this->key = $key;
    }
}

命名
$compararor = new MyComparator("Name");
usort($data, $compararor);

try this:

// $a is N-th element, $b is next element and $arguments is array of arguments to use in compare logic
usort($array, function($a, $b) use ($arguments) {
     if($a>$b) return 1;
     if($a<$b) return -1;
     foreach($arguments as $argument) {
        if($a==$argument) {
           // return -1;0;1 as you wish
        }
     }
     return 0;
});