我有一个PHP数组,看起来像这样:
array (size=1)
'Marriot' =>
array (size=7)
0 => string 'doc5.txt' (length=8)
1 => string 'test.txt' (length=8)
2 => string 'test1.txt' (length=9)
3 => string 'test2.txt' (length=9)
4 => string 'test3.txt' (length=9)
5 =>
array (size=1)
'Special Docs' =>
array (size=2)
0 => string 'doc4.txt' (length=8)
1 => string 'doc3.txt' (length=8)
6 =>
array (size=1)
'ADocs' =>
array (size=0)
empty
如你所见,它保存了非关联文件,然后是两个文件夹,"Special Docs"one_answers"adoc"。我的问题是双重的:
首先,我想将这两个文件夹移动到数组的顶部,以便它们在我的视图中突出。其次,我想按字母顺序对文件夹进行排序(例如,把"ADocs"放在"Special Docs"前面)。我已经尝试过array_multisort没有成功,我有点困在这里。有人知道我该怎么做吗?
谢谢你的帮助。
输入示例
$dir = array(
0 => 'doc5.txt',
1 => 'test.txt',
2 => 'test1.txt',
3 => 'test2.txt',
4 => 'test3.txt',
5 => array(
'Special Docs' => array (
0 => 'doc4.txt',
1 => 'doc3.txt'
)
),
6 => array(
'ADocs' => array()
)
);
一级排序
function cmp ($a,$b) {
if (is_array($a)){
if (is_array ($b)) {
return strnatcasecmp (key($a), key($b));
} else {
return -1;
}
} else {
if (is_array ($b)) {
return 1;
} else {
return strnatcasecmp ($a, $b);
}
}
}
示例输出
Array
(
[0] => Array
(
[ADocs] => Array
(
)
)
[1] => Array
(
[Special Docs] => Array
(
[0] => doc4.txt
[1] => doc3.txt
)
)
[2] => doc5.txt
[3] => test.txt
[4] => test1.txt
[5] => test2.txt
[6] => test3.txt
)
多级排序(无限制)
function cmp (&$a,&$b) {
if (is_array($a)){
usort($a[key($a)], 'cmp');
if (is_array ($b)) {
return strnatcasecmp (key($a), key($b));
} else {
return -1;
}
} else {
if (is_array ($b)) {
return 1;
} else {
return strnatcasecmp ($a, $b);
}
}
}
usort ($dir, 'cmp');
示例输出
Array
(
[0] => Array
(
[ADocs] => Array
(
)
)
[1] => Array
(
[Special Docs] => Array
(
[0] => doc3.txt
[1] => doc4.txt
)
)
[2] => doc5.txt
[3] => test.txt
[4] => test1.txt
[5] => test2.txt
[6] => test3.txt
)