我正在尝试根据排序函数的当前活动深度对多维数组进行排序。如果它对它接触的第一个数组进行排序,则活动深度将为 0。如果对第二个数组进行排序,则为 1,依此类推。
我的基本数组结构如下:
$arr[$year][$monthName][$dayNumber] = $somelink;
我在文件名的 for 循环中使用正则表达式生成数组。那部分并不重要。
至于具体的数组结构..$year
是数值,比如2012或者2013,$monthName
是月份的名称,比如April或者March,$dayNumber
当然是天数,补零,最后,$somelink
包含 html 标记,目前这并不重要。
进入实际问题.. 这个脚本的一部分我不会展示(除非要求),它使用数组的当前结构来创建一个基于列表的菜单。从今天开始,剧本开始表现得很奇怪;4 月出现在 3 月之前,以及 1 之前的第 16 天。我尝试使用以下功能解决此问题,但收效甚微;我真的无法......弄清楚让它工作的逻辑。
预期的输出是从最低到最高的年份,从顶部开始,月份以相同的方式排序,尽管按编号而不是名称,天的排序方式与年份相同。最后一个链接在这里并不重要,我不打算对它进行排序。
图示的预期输出(未显示链接以保持简短):
2012
|--March
|-1
|-15
|-16
|--April
|--May
2013
|--March
|-1
|--April
|-1
|-15
|-16
这是我到目前为止所尝试的:
function mon_sort($a,$b) {
if (date("n",strtotime($a)) == date("n",strtotime($b))) { return 0; }
return (date("n",strtotime($a)) > date("n",strtotime($b)) ? 1 : -1);
}
function menu_sort($arr,$depth) {
$newarr = array();
if ($depth == 0) {
ksort($arr);
}
else if ($depth == 1) {
uksort($arr,'mon_sort');
}
else {
}
foreach ($arr as $key => $value) {
if (is_array($value)) {
$depth++;
$value = menu_sort($value,$depth);
}
$newarr[$key] = $value;
}
return $newarr;
}
根据mon_sort()
函数,我还应该注意,三元运算符中的 1:-1 并不重要,因为我已经尝试过两种方式,但每次都失败,所以这不是问题。
在上述情况下,我并没有真正..问一个问题,我想知道我在这里做错了什么,以及我需要做些什么来解决它。