数组排序在mutli数组中的值...困惑

时间:2012-01-21 03:27:37

标签: php arrays

如果我有一个这样的数组(这是一个循环 - 所以它当然填充了多于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);

1 个答案:

答案 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;
});

另见非常好的comparison of array sorting functions