php-根据每个文件夹中包含的文件sort.txt的内容列出文件夹

时间:2014-09-22 13:33:08

标签: php arrays sorting file-get-contents

我们的想法是创建一个索引页面,其中包含指向某个目录中每个文件夹的自动生成链接。 这些文件夹中的每一个都包含一个仅包含数字的sort.txt和一个包含链接名称的name.txt。 我想使用所有sort.txt文件的内容来对链接的顺序进行排序,并将每个name.txt的内容显示为链接名称。

到目前为止,我有这个:

<?php
$Mydir = './'; 
$folders = glob($Mydir.'[^EXCLUDE]*', GLOB_ONLYDIR);
$dir = str_replace($Mydir, '', $dir);

sort($dir);
foreach($folders as $key => $dir) {

$taskSort = file_get_contents($dir. "/sort.txt");
$file = ($dir. "/name.txt");
$f = fopen($file, "r");

if ( $line = fgets($f, 1000)) 
echo   '<p><a href="' . $dir . '">⍆ ' . $line . '</a>' . $taskSort . '
<br />';

}
?>

我设法使用name.txt作为链接名称,但不根据sort.txt对它们进行排序。我如何实现$ taskSort用于排序链接? 对不起,我不是一个php专业人士...... 感谢

2 个答案:

答案 0 :(得分:0)

当你不知道架构(你可以迭代多少个文件夹)时,我喜欢使用递归目录迭代器类。我给你一个快速的样品。我不测试它,所以也许我会忘记一些事情。我允许你添加一些额外的检查(例如:文件是否可写?)。

但是,您没有提供有关sort.txt内部内容的足够信息。顺便提一句,我建议你一种可能的方式。我用一个链接填充一个数组,并假设你的$taskSort允许你在迭代结束时对数组进行排序。

$oIterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(DIRECTORY_PATH));
$aArrayOfLinks = array();
while($oIterator->valid()) {

    // For each file found
    if( $oIterator->getExtension() == 'txt') {

        // Missing additionnal check here

        $sHandle = fopen($oIterator->getPathName, "r");
        if ( $sLine = fgets($sHandle, 1000))  {
            $sDirectory = basename($_oIterator->getPath())
            // if sort.txt is in the dir path maybe you should add a particular case
            $taskSort = file_get_contents($sDirectory. "/sort.txt");
            $aArrayOfLinks[$taskSort] = '<p><a href="' . $sDirectory . '">⍆ ' . $sLine . '</a>';
        }

        fclose($sHandle);
    }

    // Next occurrence
    $oIterator->next();
}
// sort your $aArrayOfLinks following the content of $taskSort (which I don't know)

为了帮助您, RecursiveDirectoryIterator 类扩展了 FilesystemIterator ,您可以获得他所有的方法。


如果这个样本是硬/不KISS。您可以将所有链接保存在数组中,如下所示(更新和使用您的代码):

if ( $line = fgets($f, 1000)) 
    $aArrayOfLinks[$taskSort] = '<p><a href="' . $dir . '">⍆ ' . $line . '</a>' . $taskSort . ';

然后对$aArrayOfLinks进行排序,但又一次我不知道$taskSort内有什么

编辑:

根据sort.txt内的内容发表评论。我建议你使用ksort()。例如:

$array = array(03 => 'value1', 02 => 'value2', 01 => 'value3');
ksort($array);
echo'<pre>';print_r($array);echo'</pre>';

输出:

Array
(
    [1] => value3
    [2] => value2
    [3] => value1
)

答案 1 :(得分:0)

感谢debflav,它花了我一段时间,现在它的作品!这就是它现在的样子:

<?php
$Mydir = './'; ### OR MAKE IT 'yourdirectory/';
$folders = glob($Mydir.'[^EXCLUDE]*', GLOB_ONLYDIR);
$aArrayOfLinks = array();

foreach($folders as $key => $dir) {

$taskSort = file_get_contents($dir. "/sort.txt");
$file = ($dir. "/name.txt");
$f = fopen($file, "r");  
if ( $line = fgets($f, 1000)) 

$aArrayOfLinks[$taskSort] = '<p><a href="' . $dir . '">⍆ ' . $line . '</a><br />';
}
krsort ($aArrayOfLinks);
foreach ($aArrayOfLinks as $value) {
echo $value;
}
?>