1

所以我在 Directory Helper 中使用 directory_map 函数,我想知道如何编辑该函数(或者扩展它或其他什么),以便它对它给我的多维数组进行排序。

这是它当前生成的数组;

 Array
 (
  [publications] => Array
    (
        [policy_documents] => Array
            (
               [_careers] => Array
                    (
                        [0] => careers.pdf
                    )
                [_background_quality_reports] => Array
                   (
                        [0] => industry.pdf
                        [1] => international.pdf
                        [2] => departmental_resources.pdf
                        [3] => contracts.pdf
                        [4] => research_and_development.pdf
                        [5] => trade.pdf
                    )
                [_pre_release_access_list] => Array
                    (
                        [0] => pre_release_access_list.pdf
                    )
            )
        [people] => Array
            (
                [health] => Array
                    (
                        [very_serious_injuries] => Array
                            (
                              [_1_january_2013] => Array
                                    (
                                        [0] => 1_january_2013.pdf
                                    )
                            )
                    )
                [military] => Array
                    (
                        [quarterly_manning_report] => Array
                            (
                                [_1_january_2013] => Array
                                   (
                                        [0] => 1_january_2013.pdf
                                    )
                            )
                        [monthly_manning_report] => Array
                            (
                               [_20110201_1_february_2011] => Array
                                    (
                                        [0] => 1_february_2011.xls
                                        [1] => key_points.html
                                        [2] => 1_february_2011.pdf
                                    )
                                [_20110301_1_march_2011] => Array
                                    (
                                        [0] => 1 March 2011.pdf
                                    )
                                [_20110501_1_may_2011] => Array
                                    (
                                        [0] => 1 May 2011.pdf
                                    )
                                [_20110401_1_april_2011] => Array
                                    (
                                        [0] => 1 April 2011.pdf
                                    )
                            )
                    )
                [civilian] => Array
                    (
                        [civilian_personnel_report] => Array
                            (
                                [_1_april_2012] => Array
                                    (
                                        [0] => 1_april_2012.pdf
                                    )
                                [_1_october_2012] => Array
                                    (
                                       [0] => 1_october_2012.pdf
                                    )
                                [_1_january_2013] => Array
                                    (
                                        [0] => 1_january_2013.pdf
                                        [1] => key_points.html
                                    )
                                [_1_july_2012] => Array
                                    (
                                        [0] => 1_july 2012.pdf
                                    )
                            )
                    )
                [search_and_rescue] => Array
                    (
                        [monthly] => Array
                            (
                                [_1_February_2013] => Array
                                    (
                                        [0] => 1_february_2013.pdf
                                    )
                            )
                        [annual] => Array
                            (
                                [_2012] => Array
                                    (
                                        [0] => 2012.pdf
                                    )
                            )
                        [quarterly] => Array
                            (
                                [_q3_2012] => Array
                                    (
                                        [0] => q3_2012.pdf
                                    )
                            )
                    )
            )
        [estate] => Array
            (
            )
    )
)

这有点混乱,但你明白了。任何在我的模型中围绕变量包装 sort() 或 asort() 的尝试都会导致错误。这就是为什么我认为我可能必须编辑此功能或者为我创建一个新功能...

4

2 回答 2

4

您必须拆分数组,分别对文件和目录进行排序,因为目录名在键中,文件名在值中。

$dir_map = dir_map_sort(directory_map('folder/name'));

/**
 * Sorts the return of directory_map() alphabetically
 * directories listed before files
 * 
 * Example:
 *  a_dir/
 *  b_dir/
 *  a_file.dat
 *  b_file.dat
 */
function dir_map_sort($array)
{
    $dirs = array();
    $files = array();

    foreach ($array as $key => $val)
    {
        if (is_array($val)) // if is dir
        {
            // run dir array through function to sort subdirs and files
            // unless it's empty
            $dirs[$key] = (!empty($array)) ? dir_map_sort($val) : $val;
        }
        else
        {
            $files[$key] = $val;
        }
    }

    ksort($dirs); // sort by key (dir name)
    asort($files); // sort by value (file name)

    // put the sorted arrays back together
    // swap $dirs and $files if you'd rather have files listed first
    return array_merge($dirs, $files); 
}

或者

/**
 * Sorts the return of directory_map() alphabetically
 * with directories and files mixed
 * 
 * Example:
 *  a_dir/
 *  a_file.dat
 *  b_dir/
 *  b_file.dat
 */
function dir_map_sort($array)
{
    $items = array();

    foreach ($array as $key => $val)
    {
        if (is_array($val)) // if is dir
        {
            // run dir array through function to sort subdirs and files
            // unless it's empty
            $items[$key] = (!empty($array)) ? dir_map_sort($val) : $val; 
        }
        else
        {
            $items[$val] = $val;
        }
    }

    ksort($items); // sort by key

    return $items;
}
于 2013-04-26T13:26:33.783 回答
-2

您可以在 SQL 选择语句 (ORDER BY XXX) 或在控制器中使用以下方法之一进行排序

[1]:http : //php.net/manual/en/array.sorting.php php.net

于 2013-04-26T10:52:37.603 回答