ОсновноеRadiotalkПользовательское
Программирование
6   •   Посмотреть все темы

Проблемы с for

 

1
Mortuus @Mortuus
Доброго времени суток всем!

Необходимо вывести инфу, сохраненную в .тхт, при том прямо прописать файл нельзя, а надо что бы его имя (имена) брались из другого тхт как из массива. (короче делаю анонс избранных материалов на главной странице) Не знаю, как еще описать... проще по коду сориентироваться...

$topic_anons=file("base/anons/topic.txt");
$number_topic_anons=count($topic_anons)-1;

for($a=$number_topic_anons;$a>=0;$a--){
$name_topic_anons=file("base/".$topic_anons[$a]."/topic.txt");
echo $name_topic_anons[0];// в файле всегда только один элемент
}

Соответственно тхт, содержащий информацию о том, какие именно из файлов должны быть выведены - base/anons/topic.txt, пути к самим этим файлам должны формироваться в теле цикла. (ну, это я так, на всякий случай... мало ли что...)

Суть в том, что корректно выводится только первый тхт, а последующие выдают ошибку: "failed to open stream: Invalid argument" (и как это понимать я не вкурил даже после дословного перевода)
Сперва думал, что дело в самом файле. Менял элементы местами (знаю, что шаманизм, знаю, что это пляски с бубном, знаю...) - те же яйца, только в профиль...
Заметил, что в тексте ошибки выводится так же адрес самих запрашиваемых файлов (base/analiz /topic.txt) Точнее заметил не это, а то, что после той части адреса, которая вставляется циклом (в данном примере после analiz, следует пробел, которого ни в коде, ни в тхт, естественно, нет.
При фиксированном указании элемента массива, т.е. не $topic_anons[$a], а $topic_anons[0] - таже ерунда, т.е. указываю последний элемент – все ровно, указываю на второй или последующие – ошибка.

Мож кто подскажет, от чего такая шняга происходит...? Заранее благодарен....

20090
Dimitry @Dimitry
file - читает фаил в строки, а не разбивает его!
т.е. в конце каждой строки будет символ \n а может и \r
по твоему коду их можно удалить так

$topic_anons[$a]=str_replace("\n","",str_replace("\r","",$topic_anons[$a]));