我们的想法是创建一个索引页面,其中包含指向某个目录中每个文件夹的自动生成链接。 这些文件夹中的每一个都包含一个仅包含数字的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专业人士...... 感谢
答案 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;
}
?>