[英]Sorting multi-dimensional associative array in PHP
我有一個看起來像這樣的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”和“ ADocs”。 我的問題有兩個:
首先,我想將兩個文件夾移到陣列的頂部,以便它們在我的視圖中突出顯示。 其次,我想按字母順序對文件夾進行排序(即,將“ 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()
)
);
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);
}
}
}
示例輸出
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
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.