Мне нужна помощь с переписыванием этой части кода (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,
Что я должен сделать, чтобы это исправить?
Скорее всего $var
вы использовали не глобальную переменную, а локальную переменную в любой области, в которой находился этот код. (Если бы это была действительно глобальная переменная, вам бы не пришлось использовать use ($var)
; Вы могли бы просто использовать global $var;
внутри функции.) В том случае, когда вы пытаетесь получить доступ к «глобальному» $var
внутри функции она получит доступ к неопределенной переменной, которая выдаст пустое значение, а когда вы попытаетесь использовать это пустое значение для индексации массива, поиск не будет выполнен, потому что это значение не является ключом.
Если $var
на самом деле это локальная переменная, вы можете использовать ее примерно так:
usort($arr,
create_function('$a, $b', '$var = '.var_export($var,true).';
return $a[$var]>$b[$var]?-1:$a[$var]!=$b[$var];
')
);
Тогда вам понадобится использовать класс для захвата переменной:
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'));