arrays — php-список папок в соответствии с содержимым файла sort.txt, содержащегося в каждой папке

Идея состоит в том, чтобы иметь индексную страницу с автоматически сгенерированной ссылкой на каждую папку в определенном каталоге.
Каждая из этих папок содержит файл 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

Решение

Когда вы не знаете архитектуру (сколько папок вы можете перебрать), я бы хотел использовать рекурсивный класс каталогов итераторов. Я даю вам быстрый образец. Я не проверяю это, поэтому, возможно, я что-то забываю Я позволю вам добавить дополнительную проверку (например: файл доступен для записи?).

Тем не менее, вы не даете достаточно информации о том, что внутри 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
)
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;
}
?>
0

По вопросам рекламы [email protected]