美文网首页PHP
PHP实现中文自定义排序,形如:一二三四排序

PHP实现中文自定义排序,形如:一二三四排序

作者: 蓝色_风信子 | 来源:发表于2020-03-21 11:06 被阅读0次

    问题:现在有一需求:现有一系列的值,配置三、配置一二、配置二、......,要按照中文的一二三四这种顺序排列

    根源:排序函数只会根据汉字的拼音、笔画等排序,不支持自定义顺序(目前尚未找到资料)

    解决方式:自写自定义排序函数

    参考思路:

    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;
        }
    

    这里实现的是二维数组的排序,一维数组就更简单了,自行改造去~

    相关文章

      网友评论

        本文标题:PHP实现中文自定义排序,形如:一二三四排序

        本文链接:https://www.haomeiwen.com/subject/sshyyhtx.html