我需要帮助重写这部分代码(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,
我该怎么办才能修复它?
答案 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'));