Forum Webscript.Ru
Программирование => PHP => Тема начата: Pacher от 21 Мая 2002, 14:45:58
-
Я написал скрипт для вставления новостей .
Это можно сказать было первое творение на ПХП .
Он разбит на несколько скриптов , первый пишет новости в файл , второй забирает их из файла .
Так вот с этим вторым и проблема :
он работает , но он очень громоздкий , там сплошный if , elseif итд
Он сначала загоняет новости из файла в массив , считает сколько их , а потом проверяя кол-во новостей
с помощью if elseif , выводит результат .
Нельза сделать алгоритм посложнее , может с циклом как-нить ?
Вот код скрипта :
News Script
$fz=fopen("na_na.txt","r");
$links_to_news=fread($fz,4096);
$data=explode("|",$links_to_news);
//ПЕРЕМЕННЫЕ ПЕРЕМЕННЫЕ
$bla1=sizeof($data)-1;
$bla2=sizeof($data)-2;
$bla3=sizeof($data)-3;
$bla4=sizeof($data)-4;
$bla5=sizeof($data)-5;
$bla6=sizeof($data)-6;
$bla7=sizeof($data)-7;
$bla8=sizeof($data)-8;
$bla9=sizeof($data)-9;
$bla11=sizeof($data)-10;
$bla22=sizeof($data)-11;
$bla33=sizeof($data)-12;
$bla44=sizeof($data)-13;
$bla55=sizeof($data)-14;
$bla66=sizeof($data)-15;
$bla77=sizeof($data)-16;
$bla88=sizeof($data)-17;
$bla99=sizeof($data)-18;
$bla_1=sizeof($data)-19;
$bla_2=sizeof($data)-20;
$bla_3=sizeof($data)-21;
$bla_4=sizeof($data)-22;
$bla_5=sizeof($data)-23;
$bla_6=sizeof($data)-24;
$bla_7=sizeof($data)-25;
$bla_8=sizeof($data)-26;
$bla_9=sizeof($data)-27;
$bla_11=sizeof($data)-28;
$bla_22=sizeof($data)-29;
$bla_33=sizeof($data)-30;
$bla_44=sizeof($data)-31;
$bla_55=sizeof($data)-32;
$proch=" | ";
//КОНЕЦ ПЕРЕМЕННЫХ
if (sizeof($data)<=2)
{
print "$data[$bla2] $proch $data[$bla1]
";
}
elseif (sizeof($data)==4)
{
print "$data[$bla2] $proch $data[$bla1]
";
print "$data[$bla4] $proch $data[$bla3]
";
}
elseif (sizeof($data)==6)
{
print "$data[$bla2] $proch $data[$bla1]
";
print "$data[$bla4] $proch $data[$bla3]
";
print "$data[$bla6] $proch $data[$bla5]
";
}
ИТД
fclose($fz);
?>
Понимаю , что это код первоклассника , но что есть то есть .
P.S. Мне 16 .
-
Вот это
$bla1=sizeof($data)-1;
$bla2=sizeof($data)-2;
$bla3=sizeof($data)-3;
$bla4=sizeof($data)-4;
$bla5=sizeof($data)-5;
$bla6=sizeof($data)-6;
$bla7=sizeof($data)-7;
$bla8=sizeof($data)-8;
$bla9=sizeof($data)-9;
$bla11=sizeof($data)-10;
$bla22=sizeof($data)-11;
$bla33=sizeof($data)-12;
$bla44=sizeof($data)-13;
$bla55=sizeof($data)-14;
$bla66=sizeof($data)-15;
$bla77=sizeof($data)-16;
$bla88=sizeof($data)-17;
$bla99=sizeof($data)-18;
$bla_1=sizeof($data)-19;
$bla_2=sizeof($data)-20;
$bla_3=sizeof($data)-21;
$bla_4=sizeof($data)-22;
$bla_5=sizeof($data)-23;
$bla_6=sizeof($data)-24;
$bla_7=sizeof($data)-25;
$bla_8=sizeof($data)-26;
$bla_9=sizeof($data)-27;
$bla_11=sizeof($data)-28;
$bla_22=sizeof($data)-29;
$bla_33=sizeof($data)-30;
$bla_44=sizeof($data)-31;
$bla_55=sizeof($data)-32;
Заменяем на:
for($i=0;$i<33;++$i)
{
eval("\\$bla_".$i."=sizeof(\\$data)-".$i.";");
}
-
Записывай новости построчно. Одна новость на строку. Тогда сможешь прочитать при помощи file в массив и обработать строку так, как тебе необходимо.
$data = file("news.txt");
for ($step=0;$step{
//ToDo
// Делаем все, что нужно.
}
?>
З.Ы.
Сколько тебе лет - значения не имеет. :)
-
ThE0ReTiC
Ты понимаешь зачем ему все вот эти переменные $bla ?
-
AlieN
Понимаю. Только ему надо было не от переменных избавляться, а от if-else коснтрукций.
-
AlieN
Блин , ну чёж я то не догадался :)
Какой из меня програмёр после этого ...
Спасибо :)
У меня там был пост про задачи по програмированию , так вот для того они мне и нужны чтобы не совершать таких глупых ошибок .
-
хм тогда всё просто:
if (sizeof($data)%2==0)
{
for($i=0;$i{
for($h=1;$h<$i;++$h)
{
$j=$h-1;$g=$h*2;
print "$data[$g] $proch $data[$j]
";
}
}
}
PSЖ код не тестил но вроде пахать должно
-
твой первый скрипт уже был в форуме.
http://forums.webscript.ru/showthread.php?s=&postid=24930#post24930
-
AlieN
Я так и не понял , что как работает в твоем примере и на фига столько переменных ...
Чето не доходит ;[
-
Pacher
[OFF]Думай голова!!![/OFF]
-
Pacher
Собираем код вместе...
Смотри:
for($i=0;$i<33;++$i)
{
eval("\\$bla_".$i."=sizeof(\\$data)-".$i.";");
}
// НЕ знаю зачем тебе столько одинаковых переменных
if (sizeof($data)%2==0) #Если кол-во элементов $data кратно двум
{
for($i=2;$i<=sizeof($data);$i+=2)//выполняем цикл с прибавкой по два
{
$h=$i/2;
$j=$i-1;
/* грубо говоря размер массива - 8
$i=2 $h=1 $j=1;
$i=4 $h=2 $j=3;
$i=6 $h=3 $j=5;
$i=8 $h=4 $j=7;
*/
print "$data[$i] $proch $data[$j]
";
/*
По аналогии с твоей ссылкой
print "$data[$bla6] $proch $data[$bla5]
";
*/
}
}
?>
-
Pacher
По-моему, ты сильно загнул.
Тебе нужен алгоритм? прекрасно.
Весь скрипт делается в 5 строчек.
Во-первых, как абсолютно правильно сказал Теоретик, но его никто не послушал: писать надо по принципу - одна новость - один файл.
Итак:
При добавлении новости переводы строк в тексте надо заменить на
$text = str_replace("\\r", "",$text);
$text = str_replace("\\n", "
",$text);
Ну а выводим с легкостью необычайной:
if (!isset($show)) {
$data = file("news.txt");
for ($step=0;$step //допустим, новость имеет такой формат: заголовок|текст
list($title,$text)=explode("|",$data[$step]);
echo "$title
";
}
} else {
$data = file("news.txt");
list($title,$text)=explode("|",$data[$show]);
echo "$title
$text
";
}
?>
Из приведенного примера очень хорошо видно, что огромное значение в программировании имеет формат исходных данных.
-
Не , не быть мне програмером :)
Ни че не шарю ...... хотя может я просто лентяй ........
-
Совсем-совсем непонятно?
Тебе построчно объяснить, как оно работает?
(вот почему я люблю писать короткие скрипты :-))))
-
RomikChef
Да меня сам факт , что я ни в чем разобратся не могу бесит ...
Не знаю как ещё учится програмированию......
-
А постепенно :-)
я вначале точно такие же программы писал :-)
А у тебя еще все впереди :-)
Пишу свой скрипт русским языком. сравнивай построчно.
Если нет переменной $show то выводим список новостей {
считать файл data.txt и загнать его в массив $data
в цикле, от нуля до числа строк в массиве выполняем {
с помощью функции explode получаем массив, в первом элементе которого находится то, что идет до |, а во втором - то, что после.
с помощью функции list() присваиваем переменной $title значение первого элемента полученного массива, а переменной $text - второго. Но нам нужна только первая.
печатаем ссылку и заголовок новости.
}
} если переменная $show есть, то выводим новость с этим номером {
опять считываем файл data.txt и загнать его в массив $data
находим строчку с номером новости, которую передали в переменной $show - $data[$show]
опять получаем заголовок новости и текст
и выводим их!
}