码迷,mamicode.com
首页 > 编程语言 > 详细

THINKPHP_(1)_修改TP源码,支持对中文字符串按拼音进行排序。

时间:2021-06-02 19:07:51      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:load   分页显示   ret   中文字符   判断   creat   class   pre   use   

问题:TP从服务器数据中取出的collection数据,当进一步在网页中进行分页显示时,需要调用order函数,实现类似如下图的排序。

技术图片

 

当点击页面中的相关内容时,实现对服务器数据进行重排,就要调用TP编写的order函数。

但是,上述属性中包括int属性,包括中文字符串属性,我们希望按单位名称和单位简称按汉字拼音进行排序,如何修改。

解决方法

将TP的order函数源码从(order函数位于think-helper\src\Collection.php文件中)

    public function order(string $field, string $order = ‘asc‘)
    {
        return $this->sort(function ($a, $b) use ($field, $order) {
            
                $fieldA = $a[$field] ?? null;
                $fieldB = $b[$field] ?? null;

                return ‘desc‘ == strtolower($order) ? $fieldB > $fieldA : $fieldA > $fieldB;
            
        });
    }       

改为:

    public function order(string $field, string $order = ‘asc‘)
    {
        return $this->sort(function ($a, $b) use ($field, $order) {
            //添加对中文的支持。
            //xiaojie add代码,添加对中文的支持。
            $fieldA = $a[$field] ?? null;
            $fieldB = $b[$field] ?? null;
            //注意,如果取出的$fieldA是数字,就不能用preg_match。所以,应该加上一个字符串判断类型。因为有些时候会对数字进行排序。

            if (isset($fieldA) && isset($fieldB) && is_string($fieldA) &&is_string($fieldB) && preg_match("/[\x7f-\xff]/", $fieldA)){ //如果字段内容中有中文。
                $coll = collator_create( ‘zh-CN‘ );
                $res  = collator_compare( $coll, $fieldA, $fieldB );
                return ‘desc‘ == strtolower($order) ? $res<0 : $res>0;
            }
            else{
//                $fieldA = $a[$field] ?? null;
//                $fieldB = $b[$field] ?? null;

                return ‘desc‘ == strtolower($order) ? $fieldB > $fieldA : $fieldA > $fieldB;
            }
        });
    }

即可。

 

THINKPHP_(1)_修改TP源码,支持对中文字符串按拼音进行排序。

标签:load   分页显示   ret   中文字符   判断   creat   class   pre   use   

原文地址:https://www.cnblogs.com/xiaojieshisilang/p/14832880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!