Усорт с Yii Framework

Если честно, у меня здесь две проблемы: одна я новичок в Yii Framework и функции usort, которые я обнаружил в сети, не имеют для меня смысла. Я не нашел тот, который объясняет с точки зрения непрофессионалов, что происходит.

Короче говоря, у меня есть массив объектов что-то вроде этого:

Array
(
[0] => stdClass Object
    (
        [id] => 1
        [name] => Mary Jane
        [count] => 420
    )

[1] => stdClass Object
    (
        [id] => 4
        [name] => Johnny
        [count] => 234
    )

[2] => stdClass Object
    (
        [id] => 3
        [name] => Kathy
        [count] => 4354
    )

.... Я хочу отсортировать объект по идентификатору. Проблема в том, что данные сортируются по дате их последнего обновления, а не по идентификатору, и мне нужно знать последний идентификатор, потому что я просто перетаскиваю данные из API в мою базу данных. так что я, по сути, проверяю, чтобы увидеть последний идентификатор API - 1100, но последний идентификатор моей базы данных - 1050, так что я знаю, что позади примерно 50 записей.

Итак, я создал публичную статическую функцию в модели деятельности

public static function sort_api_data_by_id($a, $b)
    {
        return strcmp($a->id, $b->id);
    }

И на одной из моих страниц я запускаю функции usort

usort($array, Activity::model()->sort_api_data_by_id());

Если это что-то меняет, файл является представлением под действием, поэтому он получает доступ к функции в модели действия, поэтому он не является другим отношением модель / представление или чем-то еще.

Я получил эту функцию с другой страницы, но я не понимаю, что мне нужно передать функции для параметров $ a и $ b, ни в одном из примеров она, кажется, ничего не передает. sort_api_data_by_id - это функция в модели деятельности.

Теперь может быть более эффективным будет просто найти самый высокий идентификатор, а не сортировать весь объект, который мне все еще нужен, чтобы потом обработать данные и ввести их в базу данных, и это будет проще, если это в логическом порядке.

1 ответ

Решение

В конце концов я нашел решение, спрятанное в Google.

Я поместил эту статическую функцию в модель деятельности:

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

И затем я вызываю его с помощью ClassName::function_name, но вы отбрасываете ($a,$b). То, что первоначально меня бросило, было то, что не имело смысла, что в функции были параметры, но мы не передавали их, но я думаю, что мы передаем их окольным путем через usort, и $ a - это массив, а $ b - это результат функции, т.е. Идентификатор выше или ниже, хотя я могу ошибаться, так как немного сложно разобраться, поэтому примите это как мое понимание, а не как факт. Я не видел, чтобы это объяснили полностью где-нибудь еще.

В любом случае эта функция usort затем работает, передавая ей массив и статическую функцию

usort($array, "Activity::sort_api_data_by_id"); 
Другие вопросы по тегам