对于包含中文的PHP数组排序,有两种不同的方法可以实现,分别是使用array_multisort()函数和usort()函数。
- 使用array_multisort()函数排序
array_multisort()函数是PHP的一个组合排序函数,可以对多组数据进行排序,本方法需要使用此函数实现。
步骤如下:
1.1 类型转换
由于中文排序和字符串排序不同,需要将中文转换为拼音,这里我们可以使用php的拼音转换类pinyin.class.php进行转换,将中文转换为拼音。
1.2 数组拼接
将排序的数组按照需要的规则进行拼接,这里我们可以使用循环将每个元素拼接为‘姓氏+名称’的形式。
1.3 排序
使用array_multisort()函数进行排序。
示例代码:
require_once("pinyin.class.php");
$array = array(
array("name"=>"张三"),
array("name"=>"李四"),
array("name"=>"王五"),
array("name"=>"赵六"),
array("name"=>"钱七")
);
//数组类型转换
foreach ($array as $k => $v) {
$array[$k]['pinyin'] = Pinyin_UTF8::toPinyin($v['name']);
}
//数组拼接
foreach ($array as $k => $v) {
$sort[$k] = $v['pinyin'] . $v['name'];
}
//数组排序
array_multisort($sort, SORT_ASC, $array);
print_r($array);
输出结果:
Array
(
[0] => Array
(
[name] => 钱七
[pinyin] => qianqi
)
[1] => Array
(
[name] => 李四
[pinyin] => lisi
)
[2] => Array
(
[name] => 张三
[pinyin] => zhangsan
)
[3] => Array
(
[name] => 赵六
[pinyin] => zhaoliu
)
[4] => Array
(
[name] => 王五
[pinyin] => wangwu
)
)
- 使用usort()函数排序
usort()函数是PHP的一个自定义排序函数,可以按照指定的规则对数组中的元素进行排序。
步骤如下:
2.1 类型转换
同样需要使用pinyin.class.php将中文转换为拼音。
2.2 排序函数处理
本方法因为是使用usort()函数排序,所以需要实现自定义排序函数sortFun()进行排序,这里我们使用array_multisort()函数实现一次快速排序,再将排序的结果返回。
示例代码:
require_once("pinyin.class.php");
$array = array(
array("name"=>"张三"),
array("name"=>"李四"),
array("name"=>"王五"),
array("name"=>"赵六"),
array("name"=>"钱七")
);
//排序函数处理
function sortFun($a, $b) {
return strcmp($a['pinyin'].$a['name'], $b['pinyin'].$b['name']);
}
//类型转换
foreach ($array as $k => $v) {
$array[$k]['pinyin'] = Pinyin_UTF8::toPinyin($v['name']);
}
//数组排序
usort($array, 'sortFun');
print_r($array);
输出结果:
Array
(
[0] => Array
(
[name] => 钱七
[pinyin] => qianqi
)
[1] => Array
(
[name] => 李四
[pinyin] => lisi
)
[2] => Array
(
[name] => 张三
[pinyin] => zhangsan
)
[3] => Array
(
[name] => 赵六
[pinyin] => zhaoliu
)
[4] => Array
(
[name] => 王五
[pinyin] => wangwu
)
)
以上就是关于PHP数组中包含中文的排序方法的完整攻略,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php数组中包含中文的排序方法 - Python技术站