Идея состоит в том, чтобы иметь индексную страницу с автоматически сгенерированной ссылкой на каждую папку в определенном каталоге.
Каждая из этих папок содержит файл 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 …
Спасибо
Когда вы не знаете архитектуру (сколько папок вы можете перебрать), я бы хотел использовать рекурсивный класс каталогов итераторов. Я даю вам быстрый образец. Я не проверяю это, поэтому, возможно, я что-то забываю Я позволю вам добавить дополнительную проверку (например: файл доступен для записи?).
Тем не менее, вы не даете достаточно информации о том, что внутри 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 Вы можете получить все его методы.
Если этот образец трудно / не поцелуй. Вы можете сохранить все ссылки в массиве, как показано ниже (обновить и использовать свой код):
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
)
спасибо 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;
}
?>