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);