2014-09-24 3 views
1

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

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

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 
    ) 

.... Я хочу, чтобы отсортировать объекты по идентификатору Проблема данные сортируются по дате ее последнего обновления, а чем ID, и мне нужно знать последний идентификатор, потому что то, что я делаю, это вытащить данные из 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 - это функция в модели деятельности.

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

ответ

0

В итоге я нашел решение скрытым в 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 :: ИМЯ_ФУНКЦИИ но вы уронили ($ а, $ б). То, что изначально бросило меня, было неважно, что в функции были параметры, но мы не проходили мимо, но я считаю, что мы передаем их обходным путем через usort, а $ a - это массив, а $ b - результат функции ie это идентификатор выше или ниже, хотя я могу ошибаться, так как его немного сложно опустить вокруг, поэтому, пожалуйста, возьмите это как мое понимание, а не факт. Я на самом деле не видел, чтобы это объяснялось в другом месте.

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

usort($array, "Activity::sort_api_data_by_id"); 
+0

что, если ваш контроллер находится в модуле. 'DefaultController' не работает – iGbanam