thinkphp中文按照拼音进行排序

1,数据库中的查询方法

原生代码按照汉字排序是这样的: 
select * from `project` order by convert(`name` using gb2312) asc; 
M(‘Project’)->order(‘convert(name using gb2312) asc’)->select(); 

2, php实现

<?php

$str = "我们可以在浏览器中看到,当鼠标移到元素上时,元素开始向右移动,开始比较慢,之后则比较快,移开时按原曲线回到原点。";

$len = mb_strlen($str);
$sta = [];
for($i = 0; $i<$len; $i++){
    $tmp = mb_substr($str,$i,1);
    if($tmp != " "){
        array_push($sta,$tmp);
    }
}

//将中文字符转换成gbk编码,必须先将数组转换为字符串,然后转换编码,最后将字符串反转成数组
$sta = eval('return '.mb_convert_encoding(var_export($sta,true), "gbk","utf-8").";");
//按数组值进行排序
sort($sta);
//将中文字符转换成utf-8编码
$sta = eval('return '.mb_convert_encoding(var_export($sta,true), "utf-8", "gbk").";");

var_dump($sta)
  1. var_expost函数,输出关于传递给该函数的变量的结构信息,与var_dump的区别是其输出的是合法的php代码。若第二个参数设置为true,则从而返回变量的表示;
  2. mb_substr(),获取部分字符串,与substr不同的是,这个函数的分割是以完整的字符分割,而substr是以字节来分割的;

另一种则是类似mysql转码方式:

1     foreach ($array as $key=>$value)  
2     {  
3         $new_array[$key] = iconv('UTF-8', 'GBK', $value);  
4     }  
5     asort($new_array);  
6     foreach ($new_array as $key=>$value)  
7     {  
8         $array[$key] = iconv('GBK', 'UTF-8', $value);  
9     }

为什么使用UTF-8编码

  1. UTF-8具有良好的国际兼容性,但中文需要比GBK/BIG5版本多占用50%的数据库存储空间,仅供对国际兼容性有特殊要求的用户使用。简单地说:对于中文较多的网站,适宜用GBK编码节省数据库空间。对于英文较多的网站,适宜用UTF-8节省数据库空间。
  2. 用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。等等
    //转码 (php排序函数无法直接对utf-8编码汉字排序)
    private function utf8_array_asort(&$array)
    {
        if (!isset($array) || !is_array($array)) {
            return false;
        }
        foreach ($array as $k => $v) {
            $array[$k] = iconv('UTF-8', 'GBK//IGNORE', $v);

        }
        return true;
    }

    //多维数组排序
    public function arrayMsort(&$data,$field)
    {
        $regions = array_column($data, $field);
        $this->utf8_array_asort($regions);
        array_multisort($regions, SORT_ASC, $data);
    }
//调用
    $this->arrayMsort($local_hospital,'hospital');

由于array_multisort()无法直接对utf-8编码汉字排序,因此先转换字符编码,然后再对数组进行排序;

该模块的参考博文地址:https://blog.csdn.net/qq_32608071/article/details/55254180

3.javascript实现

1    var a = ["啊","得啊_123","得啊_0124","波啊","婆"];
2    a.sort();                                              //原始数据排序      
3    a.sort(function(a,b){return a.localeCompare(b)});      //指定排序函数

   指定排序函数时,和当前系统的区域设置有关系,如果是按照别的区域设置排序,可改。firefox下通过,360不支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值