PHP-数组排序

PHP-数组排序,php,arrays,sorting,Php,Arrays,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) {

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

//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;
}
这将为订单创建一个数组,以便按名称顺序打印数据,我也将对电子邮件和其他人重复此操作。我想做的是重新使用“cmp”功能,将$a和$b放入其中(即$c=“Name”,然后我可以放入“Email”或任何时候的//cmpup作为示例)。但从我所知的一点来看,这个函数是为uasort声明一个参数,我不向它发送变量。有没有办法做到这一点,或者是重复重写函数

谢谢 大爱

试试这个:

// $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;
});
/$a是第N个元素,$b是下一个元素,$arguments是比较逻辑中使用的参数数组
usort($array,function($a,$b)use($arguments){
如果($a>$b)返回1;
如果($a尝试制作对象

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中,可以使用

简单地用

$compararor = new MyComparator("Name");

usort($data, $compararor);

为了增强您的代码,我想最好是这样问:)注意下一次Thankstory,所以使用$arguements输入我要比较的数组部分,即“Name”或“Email”,然后在我使用“Name”的地方使用$arguements?您的问题是将第三个或更多参数传递给排序函数。因此,在我的示例中,我使用闭包传递它。它可以是任何东西,例如use($someArg,$anotherArg),取自此处:美丽的示例!
$compararor = new MyComparator("Name");

usort($data, $compararor);