function sys_threadsort($fields, $level, &$result, $arr, $arr2) { foreach ($fields as $field) { $field["tlevel"] = $level; if (!isset($result[$field["id"]])) { $result[$field["id"]] = $field; } if (isset($arr2[$field["id"]]) and count($arr2[$field["id"]]) > 0) { sys_threadsort($arr2[$field["id"]], $level + 1, $result, $arr, $arr2); } } }
static function threadsort($arr) { $arr2 = array(); foreach ($arr as $key => $value) { $arr[$key]["sorting"] = $key; } uasort($arr, "sys_threadsort_cmp"); foreach ($arr as $value) { $arr2[$value["pid"]][] = $value; } $result = array(); sys_threadsort($arr, 0, $result, $arr, $arr2); $last_sort = 0; $elems = count($result); foreach ($result as $key => $resultitem) { if ($resultitem["tlevel"] == 0) { $last_sort = $resultitem["sorting"] * $elems; } else { $last_sort++; } $result[$key]["sorting"] = $last_sort; } uasort($result, "sys_threadsort_cmp2"); return array_values($result); }