老实说,我有两个问题,一个是Yii框架的新手,我在网上发现的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
)
.... 我想按id排序对象 问题是数据是按上次更新的日期而不是ID排序的,我需要知道最后一个ID,因为我所做的是将数据从API中提取到我的数据库中,所以我基本上检查看最后的API是1100但我的数据库最后一个ID是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是活动模型中的函数。
现在可能虽然找到最高的id而不是排序整个对象可能更有效,但我仍然需要稍后处理数据并将其输入到数据库中,如果它按逻辑顺序更容易。
答案 0 :(得分:0)
我最终发现了谷歌隐藏的解决方案。
我把这个静态函数放在Activity Model中:
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");