问题:现在有一需求:现有一系列的值,配置三、配置一二、配置二、......,要按照中文的一二三四这种顺序排列
根源:排序函数只会根据汉字的拼音、笔画等排序,不支持自定义顺序(目前尚未找到资料)
解决方式:自写自定义排序函数
参考思路:
1、替换数组值:将数组相关值替换为可以明显排序的字符并记录,如:二替换为2},三替换为3}
2、正常排序:使用数组函数正常排序
3、还原数组值:将替换后的数组值,还原为原值
实现代码:
// 按自定义顺序排序方法(针对二维数组的prop_value字段)
function diy_array_asort(&$array) {
if (!isset($array) || !is_array($array)) {
return false;
}
// 原字符
$zh_arr = array("一","二","三","四","五","六","七","八","九","十");
// 对应替换后参与排序的字符(注意加特殊符号,防止后面将正常的值替换了)
$num_arr = array("1}","2}","3}","4}","5}","6}","7}","8}","9}","10}");
// 替换前后的匹配数组
$match_arr = array();
// 替换相关值
foreach ($array as $k => &$v) {
$replace_str = str_replace($zh_arr, $num_arr, $v['prop_value'], $replace_num);
if($replace_num!=0){
$match_arr[$v['prop_value']] = $replace_str;
$v['prop_value'] = $replace_str;
}
}
// 替换后的数组进行排序
// 二维数组根据字段prop_value对数组进行升序排列
$prop_values = array_column($array,'prop_value');
array_multisort($prop_values,SORT_ASC,$array);
// 排好序后,再匹配回来
foreach ($array as $k => &$v) {
if (in_array($v['prop_value'], array_values($match_arr))) {
$newArr = array_flip($match_arr); // 数组键值翻转
$v['prop_value'] = $newArr[$v['prop_value']];
}
}
return true;
}
这里实现的是二维数组的排序,一维数组就更简单了,自行改造去~
网友评论