如果我有一个这样的数组(这是一个循环 - 所以它当然填充了多于1个项目):
$returnArray[] = array("type" => $dirinfo[0],"fileSize" => $this->ByteSize($dirinfo[1]),"fileName" => $dirinfo[2]);
字段“type”可以是“文件夹”或“文件”,但它们混合在一起, 所以像文件夹,文件,文件,文件夹,文件夹,文件等
我想首先排序文件夹,然后排序文件......(比如windows文件夹显示行为)
我玩过array_multisort,但是无法让它工作......我该怎么办?
他们的例子就是这个9虽然我希望返回的相同数组只是排序,而不是新的数组。:
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
所以我做了这个:
// tmp try sorting
foreach ($returnArray as $key => $row) {
$type[$key] = $row['type'];
$fileSize[$key] = $row['fileSize'];
$fileName[$key] = $row['fileName']
}
// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($type, SORT_DESC, $fileName, SORT_ASC, $fileSize, SORT_ASC, $rfileArray);
答案 0 :(得分:2)
此类工作的第一站是usort
:
此函数将使用用户提供的值按其值对数组进行排序 比较功能。如果要排序的数组需要排序 根据一些非平凡的标准,你应该使用这个功能。
基本用法非常简单:
function cmp($a, $b) {
if ($a['type'] == $b['type']) {
return 0; // equal
}
// If types are unequal, one is file and the other is folder.
// Since folders should go first, they are "smaller".
return $a['type'] == 'folder' ? -1 : 1;
}
usort($returnArray, "cmp");
从PHP 5.3开始,您可以内联编写比较函数:
usort($returnArray, function($a, $b) {
if ($a['type'] == $b['type']) {
return 0;
}
return $a['type'] == 'folder' ? -1 : 1;
});