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