Вывод строк из нескольких файлов в цикле

usascha

Новичок
1. да, выдается сам код файла.
2. по-моему, учтено в нижеприведенном варианте.
3. как говорится, покой нам только снится. :))
4. у меня - как у всех - title в файле один, а вот файлов несколько. А как пользоваться модификатором? В мане не нашел.

А сортировка сейчас получается, но вот результат вывода все равно не идеален...

С учетом прочих замечаний выпустил версию 2 моего творчества:
PHP:
$file = glob("../ibs/ibs*.php",GLOB_BRACE);
arsort($file);
foreach (($file) as $filename) {
$handle = fopen($filename, "r");
$data = fread($handle, filesize($filename));
fclose($handle);
preg_match_all("/.*?<title.*?>(.*?)<\/title>/si",$data,$matches);
	if (strpos($matches[1][0], "Учебный план")) {
		echo "<p><hr>".substr($matches[1][0],25)."<hr>";
	}
	elseif (strpos($matches[1][0], "Мастер-класс")) {
		echo "<a href='../ibs/$filename'>".substr($matches[1][0],25)."</a><br>";
	}
	elseif (strpos($matches[1][0], "Секция")) {
		echo "<a href='../ibs/$filename'>".substr($matches[1][0],25)."</a><br>";
	}
}
В этом варианте вывод даже сортируется.
Но все равно, сортировка делается по-дурацки. Я понимаю, что что-то написано криво, но пока не пойму. Какие пути решения, куда смотреть?
 

netdog

net @
Автор оригинала: usascha
... skip ...
В этом варианте вывод даже сортируется.
Но все равно, сортировка делается по-дурацки. Я понимаю, что что-то написано криво, но пока не пойму. Какие пути решения, куда смотреть?
как только ты дашь определение сортировки "по-дурацки"
 

usascha

Новичок
согласен, термин неудачный.
Я разобрался с правилом сортировки - по названию файла.
Но эта сортировка потому "дурацкая", что файл со словом "Мастер-класс" выводится рядом с файлом со словом "Учебный план". А мне нужно сделать их раздельно, так сказать, каждый в своем месте.
К тому же массив matches содержит текст, который я и хотел бы сортировать и выводить в сортированном виде.

А вот это уже и не получается. Может у кого есть предложения?
 

Gas

может по одной?
продолжаем...
1. да, выдается сам код файла.
А говоришь абсолютные пути не работают.

2. по-моему, учтено в нижеприведенном варианте.
Никак не учтено. Проверка где? Условный оператор - if

3. как говорится, покой нам только снится. :))
дело хозяйское, чтоб вместо 3-х строчек писать одну.

4. у меня - как у всех - title в файле один, а вот файлов несколько. А как пользоваться модификатором? В мане не нашел.
Ты не понимаешь! У тебя в цикле _по очереди_ считывается содержимое каждого файла и в этом же цикле оно парсится. Рег обрабатывает содержимое только _одного_ файла. А так как ты сам говоришь что тайтл только один, то и нужен тебе [m]preg_match[/m]


В этом варианте вывод даже сортируется.
Но все равно, сортировка делается по-дурацки. Я понимаю, что что-то написано криво, но пока не пойму. Какие пути решения, куда смотреть?
Создаёшь отдельный массив $titles;
после каждого preg_match'а ложишь в него найденный тайтл
потом массив сортируешь и выводишь

или

читаешь содержимое _всех_ файлов _в одну_ переменную.
вытягиваешь все тайтлы preg_match_all'ом
и сортируешь полученный массив
 

usascha

Новичок
Тогда я уже начал путаться в показаниях...

PHP:
$file = glob("../ibs/ibs*.php",GLOB_BRACE);  //это уже массив с названием $file или нет?
arsort($file); 
foreach (($file) as $filename) { // после каждого
$handle = fopen($filename, "r"); // прохода
$data = fread($handle, filesize($filename)); // preg_match_all берет <title>
fclose($handle); // и кладет его
preg_match_all("/.*?<title.*?>(.*?)<\/title>/si",$data,$matches);  // в массив matches (ну пусть он не titles)
//дальше выводятся записи, соответствующие условию в substr. Почему они выводятся также как лежат файлы в папке?
    if (strpos($matches[1][0], "Учебный план")) { 
        echo "<p><hr>".substr($matches[1][0],25)."<hr>"; 
    } 
    elseif (strpos($matches[1][0], "Мастер-класс")) { 
        echo "<a href='../ibs/$filename'>".substr($matches[1][0],25)."</a><br>"; 
    } 
    elseif (strpos($matches[1][0], "Секция")) { 
        echo "<a href='../ibs/$filename'>".substr($matches[1][0],25)."</a><br>"; 
    } 
}
Я, честно, говоря запутался что на что надо менять.:confused:
 

Gas

может по одной?
"Не понимает. Два года служит - не понимает" @ДМБ :)

Ниже следующий текст пример алгоритма, а не рабочий код :)

PHP:
 $file = glob(path_to_dir."/ibs*.php");
 $titles = array();
 if (is_array($file)) {
   foreach ($file as $filename) {
     $filename = path_to_dir.'/'.$filename;
     if (is_file($filename)) {
       $text = file_get_contents($filename);
       if (preg_match('~<title[^>]*>(.*?)</title>~is', $text, $match)) {
         $titles[] = substr($match[1], 25);
       }
     }
   }
   sort($titles);
 }
Вывод тайтлов.
 
Сверху