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)
- var_expost函数,输出关于传递给该函数的变量的结构信息,与var_dump的区别是其输出的是合法的php代码。若第二个参数设置为true,则从而返回变量的表示;
- 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编码
- UTF-8具有良好的国际兼容性,但中文需要比GBK/BIG5版本多占用50%的数据库存储空间,仅供对国际兼容性有特殊要求的用户使用。简单地说:对于中文较多的网站,适宜用GBK编码节省数据库空间。对于英文较多的网站,适宜用UTF-8节省数据库空间。
- 用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。等等
//转码 (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不支持。