对从其中下载的子目录名称进行排序 [重复]

Sort subdirectory names downloaded from within them [duplicate]

提问人:tropiciel 提问时间:11/8/2023 最后编辑:mickmackusatropiciel 更新时间:11/9/2023 访问量:61

问:

我有一个目录,我对其子目录的名称进行排序。但这些是数字名称(植物识别号)。我希望显示植物名称而不是它们的 ID 号。在每个子目录中,我都有一个包含植物名称的 txt 文件。我把它显示在工厂ID号旁边的菜单中。但我想让植物名称(不是 ID!!)按升序排序。

带有植物名称的文件的标题>>“id plant_info_01c.txt <<

$taxon = ID Plant = 子目录的名称

工厂的名称 >> $file_info_01c_text <<是指向 iframe 的链接。

我想问一个最简单的解决方案,以便在发生辐射时由新手进行维修。如果需要数据库,它应该只在 txt 中。

<?php

$path = ".";
$dir = new DirectoryIterator($path);
foreach ($dir as $fileinfo) {
    if ($fileinfo->isDir() && !$fileinfo->isDot()) {
        
        $taxon = $fileinfo->getFilename();
        $file_info_01c = $taxon.'/'.$taxon.'_info_01c.txt';
        // wczytanie pliku 'info_01c.txt'
        $file_info_01c_text = file_get_contents($file_info_01c);

        echo $taxon.' &nbsp;  <A href="index-if.php?taxon='.$taxon.'" target="ramka">'.$file_info_01c_text.'</A><br>';
    }
}

?>
PHP 数组对 文件名 进行排序

评论

0赞 tadman 11/8/2023
PSA:PHP确实有插值功能,所以你不需要在这里搞乱串联。 比"$x.{$y}_z"$x.'.'.$y.'_z'

答:

0赞 dwsndev 11/8/2023 #1

将数据添加到数组中,并在回显链接之前对其进行排序。

$plants = [];

foreach (new DirectoryIterator(".") as $fileinfo) {
    if ($fileinfo->isDir() && !$fileinfo->isDot()) {
        $taxon = $fileinfo->getFilename();
        $plants[] = [
            'name'  => file_get_contents("{$taxon}/{$taxon}_info_01c.txt"),
            'taxon' => $taxon,
        ];
    }
}

// Sort results by the file text
usort($plants, fn($a, $b) => $a['name'] <=> $b['name']);

// Create the links here instead
foreach ($plants as $plant) {
    $name  = $plant['name'];
    $taxon = $plant['taxon'];
    echo "{$taxon} &nbsp; <a href=\"index-if.php?taxon={$taxon}\" target=\"ramka\">{$name}</a><br>";
}

评论

0赞 mickmackusa 11/8/2023
这不是一个关联数组,它是一个包含关联行的索引数组。
0赞 mickmackusa 11/8/2023
在现代 PHP 应用程序中,使用箭头函数和 spaceship 运算符(如果不使用 )。这个答案也有太多的一次性变量声明,可以进一步完善。array_multisort()
0赞 dwsndev 11/9/2023
更新了建议。