php - Yii Dataprovider 日期排序

标签 php sorting gridview yii2 dataprovider

我有 ArrayDataProvider,其字段类型为 DateTime - 生日。 我将该数据提供者用于 View 部分中的 GridView 。

由于生日包括出生年份,因此排序未按预期进行。 有没有办法以某种方式告诉排序机制不考虑年份,只按月和日排序?也许是自定义排序功能?

编辑:类似于 C++ 中的 sort,您可以在其中传递比较函数。

编辑当前解决方案描述: 我目前的解决方案是将出生年份作为数组中的单独字段,并将出生日期的年份设置为当前年份。现在日期来自同一年并且排序有效。但是出生年份的单独字段感觉不对。我希望我可以从一个日期对象中获取所有必要的数据。

这个单独的领域磨我的齿轮。这并不完美。

编辑: 哦,还有 Yii2

更新 还有一个采用比较回调的 PHP 数组排序函数 - 例如 uasort 可以用于像我这样的关联数组:

uasort($persons, function($a, $b){
    return strcasecmp( $b['date']->format('m-d'), $a['date']->format('m-d') );
});

现在我需要找到将它实现到 ArrayDataProvider 中的方法。这里有什么想法吗?

最佳答案

如果你有一个数组数据提供者,你当然不能使用数据库排序。

使用 Yii 的解决方案

要允许按某些表达式排序,您必须事先计算值并将属性的排序配置为使用计算值而不是原始值:

// assuming $data contains your data and 'birthdate' is the value you want to use for sorting

foreach($data as $key => $value) {
    $data[$key]['sort_birthdate'] = date('m-d', strtotime($value['birthdate']));
}
$dataProvider = new \yii\data\ArrayDataProvider([
    'allModels' => $data,
    'sort' => [
        'attributes' => [
            'birthdate' => [
                'asc' => [
                    'sort_birthdate' => SORT_ASC, 
                ],
                'desc' => [
                    'sort_birthdate' => SORT_DESC, 
                ],
                'label' => 'Date',
                'default' => SORT_ASC
            ],
            // list all other attributes here
        ],
    ]
]);

扩展 Yii 的解决方案

如果你想要自定义比较功能,你必须扩展 Yii 类来支持它。 您可以创建一个自定义 ArrayDataProvider 类,该类扩展自 Yii 附带的类并覆盖 sortModels() -方法。

关于php - Yii Dataprovider 日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26331930/

相关文章:

php - 在不刷新/离开页面的情况下更新记录

mysql - MySql Server Inner join 查询中的无效对象名称错误

javascript - 如何使用jquery遍历gridview并检查是否选中了任何复选框

javascript - 如何在 php 和 mysql 中使用没有按钮提交的 onclick 事件 CHECKBOX 更新数据

javascript - PHP move_uploaded_file 只上传一个文件

c# - .Sort(Function(x, y) -> 当没有要排序的内容时重新排列列表(即所有排序字段具有相同的值)

sorting - Elasticsearch组排序组合查询

c# - 如何更新 GridView 页脚模板中标签的值?

php - Windows 8 中的 Memcache 安装 : Could not connect to 127. 0.0.1

Java ArrayList 集合排序