2015-04-28 2 views
0

мне нужна помощь с переписывания эту часть кода (PHP> 5,3):Anonymous usort функция переписан на PHP 5.2

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, 

Что мне делать, чтобы исправить это?

+1

Либо '$ a', либо' $ b' не имеет индекса '$ var'. Do 'print_r ($ a);' для обоих массивов все видят, как выглядит структура. – Rizier123

+1

Действительно ли '$ var' ** действительно ** глобальный или локален в области основной функции? –

+0

оберните его в if-statement 'if (! Empty ($ a [$ var]) &&! Empty ($ b [$ var]))' – RST

ответ

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')); 
Смежные вопросы