【问题标题】:Usort with Yii Framework使用 Yii 框架进行排序
【发布时间】:2014-09-24 20:26:37
【问题描述】:

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

【问题讨论】:

    标签: php yii usort


    【解决方案1】:

    我最终找到了隐藏在 google 中的解决方案。

    我把这个静态函数放在了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 是函数的结果,即id 是更高还是更低,尽管我可能是错的,因为它有点难以理解,所以请将此作为我的理解,而不是事实。我还没有真正看到它在其他任何地方得到完整的解释。

    在任何情况下,这个 usort 函数都会通过将数组和静态函数传递给它来工作

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

    【讨论】:

    • 如果你的控制器在一个模块中怎么办。 DefaultController 不起作用
    猜你喜欢
    • 2017-09-04
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多