您好我有以下功能:
foreach($array_1 as &$arr){
usort($arr,"cmp");
}
function cmp($a, $b) {
if ($a[2] == $b[2]) {
return 0;
}
return ($a[2] < $b[2]) ? -1 : 1;
}
如果我这样做它可以工作,但如果我把一个变量而不是2 = = 2和一个数字,该函数不起作用。为什么这样,我该如何解决?我希望能够根据变量输入更改数字以对数组进行排序。
不起作用的代码是:
$type = 2;
foreach($array_1 as &$arr){
usort($arr,"cmp");
}
function cmp($a, $b) {
if ($a[$type] == $b[$type]) {
return 0;
}
return ($a[$type] < $b[$type]) ? -1 : 1;
}
答案 0 :(得分:3)
对于PHP 5.3+,希望你应该使用,解决方案很简单,使用闭包:
$index = 2;
foreach ($array_1 as &$arr) {
usort($arr, function ($a, $b) use ($index) {
return $a[$index] - $b[$index];
});
}
对于PHP 5.2-,您可以使用global
变量( YUCK !! )或类:
class Sort {
protected $index;
public function __construct($index) {
$this->index = $index;
}
public function compare($a, $b) {
return $a[$this->index] - $b[$this->index];
}
}
$index = 2;
foreach ($array_1 as &$arr) {
usort($arr, array(new Sort($index), 'compare'));
}