Forum Webscript.Ru

Программирование => PHP => Тема начата: Pacher от 21 Мая 2002, 14:45:58

Название: Алгоритм.
Отправлено: Pacher от 21 Мая 2002, 14:45:58
Я написал скрипт для вставления новостей .
Это можно сказать было первое творение на ПХП .
Он разбит на несколько скриптов , первый пишет новости в файл , второй забирает их из файла .
Так вот с этим вторым и проблема :
он работает , но он очень громоздкий , там сплошный if , elseif итд
Он сначала загоняет новости из файла в массив , считает сколько их , а потом проверяя кол-во новостей
с помощью if elseif , выводит результат .
Нельза сделать алгоритм посложнее , может с циклом как-нить ?
Вот код скрипта :



News Script<br />


$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 .
Название: Алгоритм.
Отправлено: AlieN от 21 Мая 2002, 17:50:08
Вот это

$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.";");
  }
Название: Алгоритм.
Отправлено: ThE0ReTiC от 21 Мая 2002, 17:50:23
Записывай новости построчно. Одна новость на строку. Тогда сможешь прочитать при помощи file в массив и обработать строку так, как тебе необходимо.

$data = file("news.txt");
for ($step=0;$step{
//ToDo
// Делаем все, что нужно.
}
?>


З.Ы.
Сколько тебе лет - значения не имеет. :)
Название: Алгоритм.
Отправлено: AlieN от 21 Мая 2002, 17:51:30
ThE0ReTiC
Ты понимаешь зачем ему все вот эти переменные $bla ?
Название: Алгоритм.
Отправлено: ThE0ReTiC от 21 Мая 2002, 18:00:21
AlieN
Понимаю. Только ему надо было не от переменных избавляться, а от if-else коснтрукций.
Название: Алгоритм.
Отправлено: Pacher от 21 Мая 2002, 19:00:20
AlieN
Блин , ну чёж я то не догадался :)
Какой из меня програмёр после этого ...
Спасибо :)
У меня там был пост про задачи по програмированию , так вот для того они мне и нужны чтобы не совершать таких глупых ошибок .
Название: Алгоритм.
Отправлено: AlieN от 27 Мая 2002, 19:07:56
хм тогда всё просто:

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Ж код не тестил но вроде пахать должно
Название: Алгоритм.
Отправлено: Dm от 28 Мая 2002, 14:50:05
твой первый скрипт уже был в форуме.
http://forums.webscript.ru/showthread.php?s=&postid=24930#post24930
Название: Алгоритм.
Отправлено: Pacher от 06 Июня 2002, 01:28:05
AlieN
Я так и не понял , что как работает в твоем примере и на фига столько переменных ...
Чето не доходит ;[
Название: Алгоритм.
Отправлено: AlieN от 06 Июня 2002, 11:10:32
Pacher

[OFF]Думай голова!!![/OFF]
Название: Алгоритм.
Отправлено: AlieN от 07 Июня 2002, 17:51:20
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]
";
*/
}
}
?>
Название: Алгоритм.
Отправлено: Меняздесьдавнонет от 09 Июня 2002, 18:09:35
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
";
}
?>


Из приведенного примера очень хорошо видно, что огромное значение в программировании имеет формат исходных данных.
Название: Алгоритм.
Отправлено: Pacher от 09 Июня 2002, 23:14:02
Не , не быть мне програмером :)
Ни че не шарю ...... хотя может я просто лентяй ........
Название: Алгоритм.
Отправлено: Меняздесьдавнонет от 09 Июня 2002, 23:39:38
Совсем-совсем непонятно?
Тебе построчно объяснить, как оно работает?
(вот почему я люблю писать короткие скрипты :-))))
Название: Алгоритм.
Отправлено: Pacher от 10 Июня 2002, 00:13:57
RomikChef
Да меня сам факт , что я ни в чем разобратся не могу бесит ...
Не знаю как ещё учится програмированию......
Название: Алгоритм.
Отправлено: Меняздесьдавнонет от 10 Июня 2002, 00:27:39
А постепенно :-)
я вначале точно такие же программы писал :-)
А у тебя еще все впереди :-)

Пишу свой скрипт русским языком. сравнивай построчно.

Если нет переменной $show то выводим список новостей {

  считать файл data.txt и загнать его в массив $data
  в цикле, от нуля до числа строк в массиве выполняем {

  с помощью функции explode получаем массив, в первом элементе которого находится то, что идет до |, а во втором - то, что после.
  с помощью функции list() присваиваем переменной $title значение первого элемента полученного массива, а переменной $text - второго. Но нам нужна только первая.
  печатаем ссылку и заголовок новости.
  }
} если переменная $show есть, то выводим новость с этим номером {
  опять считываем файл data.txt и загнать его в массив $data
  находим строчку с номером новости, которую передали в переменной $show - $data[$show]
  опять получаем заголовок новости и текст
  и выводим их!
}