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