php对字符串编号排序,如3.1.1到3.1.2,自定义函数对比每个位置的数值即可

/**
 * 对代码数组进行排序
 *
 * 该方法使用自定义的排序函数来对任务代码数组进行排序
 * 排序规则基于任务代码的组成部分,首先比较相同位置上的部分,
 * 如果相同位置上的部分相同,则继续比较下一部分,直到找出不同部分为止
 * 如果所有部分都相同,则根据任务代码部分的数量进行排序
 *
 * @param array &$array 任务代码数组,每个元素包含一个'task_code'字段
 */
private function sortTaskCodes(&$array)
{
    // 使用usort函数对数组进行自定义排序
    usort($array, function ($a, $b) {
        // 将任务代码按点号分隔成部分
        $aCodeParts = explode('.', $a['task_code']);
        $bCodeParts = explode('.', $b['task_code']);

        // 获取两个任务代码部分数量的最小值
        $length = min(count($aCodeParts), count($bCodeParts));

        // 遍历每个部分进行比较
        for ($i = 0; $i < $length; $i++) {
            // 如果两个部分相同,则继续比较下一部分
            if ($aCodeParts[$i] == $bCodeParts[$i]) {
                continue;
            }
            // 返回两个部分的差值,决定排序顺序
            return $aCodeParts[$i] - $bCodeParts[$i];
        }

        // 如果所有相同位置上的部分都相同,则根据任务代码部分的数量进行排序
        return count($aCodeParts) - count($bCodeParts);
    });
}

上面的task_code是我自己使用的编码,如3、3.1、3.1.2、4、4.2、4.2.1等,这样会自动按编码顺序排序

评论/留言