【问题标题】:Sort list of sub-directories子目录的排序列表
【发布时间】:2019-03-11 21:26:44
【问题描述】:

我有两个问题:

1) 我使用以下代码输出文件夹“问题”中包含的子目录列表。每个子目录都是一个数字。我想通过增加值对输出进行排序,所以 1、2、3、4、5、6、7、8、9、10、11、... 20、21 等。

我该怎么做?

<?php

chdir('issues');
$d = dir(".");

echo "<ul>";

while (false !== ($entry = $d->read()))
{
 if (is_dir($entry) && ($entry != '.') && ($entry != 'sponsors') && 
 ($entry != '..'))
 echo "<li><a href='{$entry}'>{$entry}</a></li>";
}

echo "</ul>";

$d->close();

?>

2) 在同一页面的不同部分,我还想输出一个指向最新一期的链接,即编号最高的子目录。我该怎么做?

谢谢!

【问题讨论】:

    标签: php


    【解决方案1】:

    使用 scandir() 和 array_slice 来获取目录内容的排序数组。

    按照 dossy 的建议,使用 asort 进行准确的数字排序。

    $directory = 'issues';
    $contents = array_slice(scandir('issues'), 2);
    $sub_dirs = array();
    foreach($contents as $c){
       $path = $directory."/".$c;
       if(is_dir($path) && $c !== 'sponsors'){
          $sub_dirs[] = $c;
       }
    }
    asort($sub_dirs, SORT_NUMERIC);
    $latest = end($sub_dirs);
    reset($sub_dirs);
    echo '<ul>';
    foreach($sub_dirs as $sub){
       echo '<li><a href="'.$directory.'/'.$sub.'">'.$sub.'</a></li>';
    }
    echo '</ul>';
    echo '<a href="'.$directory.'/'.$latest.'">'.$latest.'</a>';
    

    【讨论】:

    • scandir() 不是按数字排序,而是按字典顺序排序。 stackoverflow.com/questions/6810619/…
    • 你可以asort($contents) 对列表进行数字排序
    • 非常感谢!第一部分工作完美,但第二部分吐出我在父文件夹中的一些文件,而不是编号最高的子目录。有任何想法吗?谢谢!
    • 哦,是的,那是因为当您使用 scandir 时,您实际上检索了父目录的全部内容(包括那些文件)。当我意识到我错过了您问题的第二部分并将其添加到答案中时,我忘记了那部分。从循环内容并仅过滤掉目录的第一部分开始,您可以使用相同的逻辑仅将这些目录放入另一个数组中,然后抓取该数组的末尾。
    猜你喜欢
    • 2013-09-25
    • 2015-04-27
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 2022-11-12
    相关资源
    最近更新 更多