-1

您好我有以下功能:

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;
}
4

1 回答 1

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'));
}
于 2013-03-20T10:27:02.277 回答