与Yii框架一起使用

时间:2014-09-24 20:26:37

标签: php yii usort

老实说,我有两个问题,一个是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而不是排序整个对象可能更有效,但我仍然需要稍后处理数据并将其输入到数据库中,如果它按逻辑顺序更容易。

1 个答案:

答案 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");