/** * 对代码数组进行排序 * * 该方法使用自定义的排序函数来对任务代码数组进行排序 * 排序规则基于任务代码的组成部分,首先比较相同位置上的部分, * 如果相同位置上的部分相同,则继续比较下一部分,直到找出不同部分为止 * 如果所有部分都相同,则根据任务代码部分的数量进行排序 * * @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等,这样会自动按编码顺序排序