Переписать анонимную функцию usort в PHP 5.2

Мне нужна помощь с переписыванием этой части кода (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

Решение

Скорее всего $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];
')
);
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'));
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector