Усорт с 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");