Как остановить проблему redeclare php, переместившись в другое место - PullRequest
0 голосов
/ 06 декабря 2011

У меня в основном есть PHP-функция, которая находится в гигантском выражении foreach, и должен быть в этом foreach , потому что он использует значения из цикла.1006 *

            function sortq($a, $b){
                if ((int)$a->id == (int)$b->id) {
                    return 0;
                }
                return ((int)$a->id < (int)$b->id) ? -1 : 1;
            }

            usort($sort, 'sortq');

...

}

Как разделить эту функцию на общий класс или метод, чтобы я мог вызывать ее любое количество раз?Я попробовал маршрут 'class', но затем перераспределил классы в цикле foreach: D

Пожалуйста, помогите!Большое спасибо

1 Ответ

1 голос
/ 06 декабря 2011

Включение определения функции в function_exists проверка будет работать:

if (!function_exists('sortq')) {
    function sortq($a, $b) { ... }
}

Если вы можете рассчитывать как минимум на PHP 5.3+, вы должны использовать closure :

usort($sort, function($a, $b) {
    if ((int)$a->id == (int)$b->id) {
        return 0;
    }
    return ((int)$a->id < (int)$b->id) ? -1 : 1;
});

Редактировать: На самом деле, определение функции сравнения, требуемое usort , гласит:

Функция сравнения должна возвращать целое число меньше, равно или больше нуля, если первый аргумент считается соответственно меньше, равен или больше второго.

Таким образом, вы можете упростить эту функцию до:

function ($a, $b) { return (int)$a->id - (int)$b->id; }
...