[英]Sorting multi-dimensional associative array in PHP
I have a PHP array that looks like this: 我有一个看起来像这样的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
As you can see, it holds non-associative files, and then two folders, "Special Docs" and "ADocs". 如您所见,它包含非关联文件,然后包含两个文件夹“ Special Docs”和“ ADocs”。 My problem is two-fold:
我的问题有两个:
First, I want to move the two folders to the top of the array so that they will be prominent in my view. 首先,我想将两个文件夹移到阵列的顶部,以便它们在我的视图中突出显示。 Second, I want to sort the folders alphabetically (ie put "ADocs" above "Special Docs". I have tried array_multisort without success and am sort of stuck here. Anyone know how I might achieve this?
其次,我想按字母顺序对文件夹进行排序(即,将“ ADocs”放在“ Special Docs”上方。我尝试了array_multisort失败,并且有点卡在这里。有人知道我将如何实现这一目标吗?
Thanks for your help. 谢谢你的帮助。
Example Input 输入示例
$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()
)
);
1 level sorting 1级排序
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);
}
}
}
Example Output 示例输出
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
)
Multi level sorting (unlimited) 多级排序(无限)
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');
Example Output 示例输出
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
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.