PHP函数不适用于变量

时间:2013-03-20 10:22:51

标签: php function variables sorting

您好我有以下功能:

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

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