我正在使用readdir将文件循环到一个数组中并取回这个结果:
Array
(
[0] => Array
(
[name] => /css
[type] => directory
[size] => 0
)
[1] => Array
(
[name] => /index.html
[type] => file
[size] => 1208
)
[2] => Array
(
[name] => /js
[type] => directory
[size] => 0
)
)
我的目标是以典型的“文件结构格式”获取它们,而它首先按类型(目录然后是文件)排序,然后按字母顺序排序。
答案 0 :(得分:1)
function custom_order($a, $b)
{
$type_cmp = -strcmp($b['type'], $a['type']);
if ($type_cmp == 0)
{
return -strcmp($b['file'], $a['file']);
}
else
{
return $type_cmp;
}
}
$test = array
(
0 => array
(
'name' => '/css',
'type' => 'directory',
'size' => 0
),
1 => array
(
'name' => '/index.html',
'type' => 'file',
'size' => 1208
),
2 => array
(
'name' => '/js',
'type' => 'directory',
'size' => 0
)
);
// http://www.php.net/manual/en/function.usort.php
usort($test, 'custom_order');
var_dump($test);
我为了好玩而制作了一个单线眼镜。 (不是代码清晰度推荐的那个)
function custom_order($a, $b)
{
return ($type_cmp = -strcmp($b['type'], $a['type'])) === 0 ? -strcmp($b['file'], $a['file']) : $type_cmp;
}
答案 1 :(得分:0)
如果你想要复杂(根据具体情况可能没有必要 - 我假设你在每个数组中都会有相对较少的条目(~100)),你应该研究一下divide-and.conquer排序算法的速度优化(参见例如http://www.ics.uci.edu/~eppstein/161/960118.html或在维基百科中查看概述)。
除了精致之外,你可以这样做:
function colSort(&$arr, $col, $dir = SORT_ASC) {
$sort = array();
foreach ($arr as $k => $r) {
$sort[$k] = $r[$col];
}
array_multisort($sort, $dir, $arr);
}
然后您可以使用例如colSort($array, 'type');
按类型排序。可以进一步修改该示例以按文件大小或文件名排序。