匿名usort函数重写到PHP 5.2

时间:2015-04-28 07:50:09

标签: php anonymous-function usort

我需要帮助重写这部分代码(PHP> 5.3):

usort($arr,function($a,$b)use($var){return $a[$var]>$b[$var]?-1:$a[$var]!=$b[$var];});

到PHP 5.2:

usort($arr,create_function('$a, $b','global $var; return $a[$var]>$b[$var]?-1:$a[$var]!=$b[$var];'));

现在我遇到了错误:

PHP Notice: Undefined index: in file.php(23) : runtime-created function on line 1,

我该怎么办才能修复它?

2 个答案:

答案 0 :(得分:0)

你使用的$var很可能不是一个全局变量,而是这个代码所在范围内的局部变量。(如果它真的是一个全局变量,那么你就不必使用use ($var);您可以在函数内使用global $var;。)在这种情况下,当您尝试访问" global"在函数内部$var,它将访问一个未定义的变量,该变量将给出一个空值,当您尝试使用此空值来索引数组时,它无法查找,因为该值不是键。

如果$var确实是一个局部变量,您可以使用以下内容:

usort($arr,
    create_function('$a, $b', '$var = '.var_export($var,true).';
        return $a[$var]>$b[$var]?-1:$a[$var]!=$b[$var];
    ')
);

答案 1 :(得分:0)

你几乎必须使用一个类来捕获变量:

class Comp {

    protected $key;

    public function __construct($key) {
        $this->key = $key;
    }

    public function compare(array $a, array $b) {
        return $b[$this->key] - $a[$this->key];
    }

}

usort($arr, array(new Comp($var), 'compare'));