我在数组中有一个数组,其中包含文件名,修改时间和大小,但我需要能够按这些属性中的每一个按升序或降序排序数组。
我有以下内容,获取信息
//SCAN THE DIRECTORY
$directories = scandir($dir);
$directinfo = array();
foreach($directories as $directory){
if ($directory === '.' or $directory === '..') continue;
if(!stat($dir.'/'.$directory)){
} else {
$filestat = stat($dir.'/'.$directory);
$directinfo[] = array(
'name' => $directory,
'modtime' => $filestat['mtime'],
'size' => $filestat['size']
);
}
}
数组的结构如下:
Array (
[0] => Array (
[name] => 0 Organisation Details
[modtime] => 1398164749
[size] => 4096
)
[1] => Array (
[name] => 1 Permission Form
[modtime] => 1398164749
[size] => 4096
)
[2] => Array (
[name] => 6 Invoices
[modtime] => 1400802471
[size] => 4096
)
)
然后使用它输出:
foreach($directinfo as $dirInfo){
foreach($dirInfo as $key=>$drInfo){
echo "Output: ".$key."=>".$drInfo."<br />";
}
}
但我需要在此之前安排数组,并以某种方式使它成为所以我不需要两个数组或者我怀疑有序输出不起作用。
我看过array_multisort
,但无法弄清楚这在这种情况下会如何起作用。
非常感谢任何帮助。
答案 0 :(得分:1)
您可以使用usort:
usort($arr, function($a,$b){
return strcmp($a['name'], $b['name']);
});
var_dump($arr);
答案 1 :(得分:0)
在array_multisort
manual page上使用示例#3:
$directories = array(
array('name'=>'filec','modtime'=>'12303403434','size'=>'12401'),
array('name'=>'fileb','modtime'=>'12303403432','size'=>'12400'),
array('name'=>'filez', 'modtime'=>'12304445405','size'=>'65200')
);
// Obtain a list of columns
$name = $modtime = $size = array();
foreach ($directories as $key => $row) {
$name[$key] = $row['name'];
$modtime[$key] = $row['modtime'];
$size[$key] = $row['size'];
}
// Sort the data with name ascending, modtime ascending, size ascending
array_multisort($name, SORT_ASC, $modtime, SORT_ASC, $size, SORT_ASC, $directories);
print_r($directories);
在线演示here