扫码关注官方订阅号
php 数组同时包含中英文,怎么对数组按首个单词或者汉字排序
PHP有很多对数组进行排序的函数。
比如最基本的sort和rsort(加r的代表逆序,下同);自然排序的natsort(自然排序就是对数字按照大小排序,而不是根据ASCII码排序)以及忽略大小写的natcasesort;保持键-值索引关系的asort和arsort;依据键进行排序的ksort和krsort;如果你不满意内置的排序规则,你还可以自己编写函数确定排序规则的usort、uasort和uksort(对应没有u的上述函数);还有可以对多个数组排序,并且只保持关联数组的键-值索引关系的array_multisort。
sort
rsort
r
natsort
natcasesort
asort
arsort
ksort
krsort
usort
uasort
uksort
u
array_multisort
这么多排序总有一款适合你。具体请参阅文档。
<?php header('Content-Type: text/plain; charset=utf-8'); $arr = explode(' ', '1 11 111 112 12 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中'); shuffle($arr); //打乱数组 //collator_sort(collator_create('zh_CN'), $arr); //usort($arr, function($a, $b) { return strnatcmp($a, $b); }); usort($arr, function($a, $b) { return strcmp($a, $b); }); echo implode(' ',$arr); exit(); ?> ls排序: 1 11 111 112 12 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中 collator_sort(zh_CN)排序(类似Windows/Linux桌面文件管理器里的默认按名称上升排列): 1 11 12 111 112 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中 strnatcmp排序: 1 11 12 111 112 121 122 a aa aaa aab ab aba abb 中 中中 中中中 中中国 中国 中国中 中国国 百度 阿里 strcmp排序: 1 11 111 112 12 121 122 a aa aaa aab ab aba abb 中 中中 中中中 中中国 中国 中国中 中国国 百度 阿里
使用strcmp字符串比较排序其实就已经能够满足你的需求.strnatcmp自然排序跟strcmp字符串比较排序主要区别在于数字,strnatcmp处理后的数字元素是由小到大排序,存在大小关系.而ICU扩展intl里的简体中文排序器collator_sort(zh_CN)排序主要能够根据汉字的拼音进行排序,比如Ali,Baidu,ZhongGuo.感兴趣还可以看下我的这篇文章 PHP利用ICU扩展intl快速实现汉字转拼音以及按拼音首字母分组排序 ,汉字转拼音就一个函数的事:
echo transliterator_transliterate('Any-Latin; Latin-ASCII; Upper()', '中华有为'); //输出 ZHONG HUA YOU WEI
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
PHP有很多对数组进行排序的函数。
比如最基本的
sort和rsort(加r的代表逆序,下同);自然排序的
natsort(自然排序就是对数字按照大小排序,而不是根据ASCII码排序)以及忽略大小写的natcasesort;保持键-值索引关系的
asort和arsort;依据键进行排序的
ksort和krsort;如果你不满意内置的排序规则,你还可以自己编写函数确定排序规则的
usort、uasort和uksort(对应没有u的上述函数);还有可以对多个数组排序,并且只保持关联数组的键-值索引关系的
array_multisort。这么多排序总有一款适合你。
具体请参阅文档。
使用strcmp字符串比较排序其实就已经能够满足你的需求.
strnatcmp自然排序跟strcmp字符串比较排序主要区别在于数字,strnatcmp处理后的数字元素是由小到大排序,存在大小关系.
而ICU扩展intl里的简体中文排序器collator_sort(zh_CN)排序主要能够根据汉字的拼音进行排序,比如Ali,Baidu,ZhongGuo.感兴趣还可以看下我的这篇文章 PHP利用ICU扩展intl快速实现汉字转拼音以及按拼音首字母分组排序 ,汉字转拼音就一个函数的事: