Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Losowe wywoływanie tekstu, na pliku
D3vilroot
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.08.2006

Ostrzeżenie: (0%)
-----


Pewnie ten kod nie jest zbyt profesjonalny, ale po części działa więc nie obrzucajcie błotem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Tak to wygląda
Kod
<?php

$nr1 = fopen('wpis.txt', 'r');
$nr2 = fopen('wpis2.txt', 'r');
$nr3 = fopen('wpis3.txt', 'r');
$nr4 = fopen('wpis4.txt', 'r');
$nr5 = fopen('wpis5.txt', 'r');

$tresc1 = fread($nr1, filesize("wpis.txt"));
$tresc2 = fread($nr2, filesize("wpis2.txt"));
$tresc3 = fread($nr3, filesize("wpis3.txt"));
$tresc4 = fread($nr4, filesize("wpis4.txt"));
$tresc5 = fread($nr5, filesize("wpis5.txt"));
// definujemy teksty
$text=array(
   1 => $tresc1,
   2 => $tresc2,
   3 => $tresc3,
   4 => $tresc4,
   5 => $tresc5
);


// inicjujemy generator liczb losowych
srand((double) microtime() * 10000000);

// sprawdzamy ilość tekstów w tablicy
$ile = count($text);
// losujemy liczbę
$losowa = rand(1, $ile);

// wyświetlamy tekst
echo "<br><br><br>$text[$losowa]";
?>


Chciałbym wiedzieć jak zrobić, żeby pobrany tekst z pliku posiadał znaki zakończenia linii. Bo tak wygląda troche nieładnie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

I teraz druga sprawa. Chce zrobić tak, że będe pobierał linie z pliku funkcją file(). Wiem, że tworzy ona tablice i 1 element tablicy to 1 linia tekstu. Jak zrobić, żeby np. 20 linii z 10 stronowego tekstu pojawiało się przypadkowo, np.
Kod
15 linia
jakiś tam mój kod
23 linia
1 linia
znowu mój kod
itd.

I żeby żadna linia się nie powtarzała? Może to głupie pytania, ale troche już szukałem i udało mi się tyle, że linie się powtarzają.
Dzięki za przeczytanie i wszelką pomoc (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
MagnuM
post
Post #2





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

Ostrzeżenie: (0%)
-----


W moim przekonaniu ten kod jest straszny. No ale cóż.. przyałoby się żebyś wiedział właściwie dlaczego? Przyda Ci się na przyszłość ;-)

1. Otwierasz każdy plik pokolei, chociaż użyjesz tylko jednego z nich.
Prosta kwestia. Skrypt wykonywany jest strasznie długo. Co w momencie gdy plików będzie więcej?

2. Wczytujesz każdy plik do zmiennej. Bardzo długo to trwa. W przypadku większych plików zmienne zawierają straszne ilości danych, chociaż nie wiem czy to jest wada ? Zaleta na pewno nie...

3. W obecnej wersji php inicjowanie generatora liczb losowych nie jest wymagane!

Musisz wiedzieć, że php to przede wszystkim skrypty dynamiczne, a Ty nie wykorzystujesz jego możliwości.
Zdaje mi się, że to jest przypadek czytania przestarzałych, beznadziejnych kursów o php i potomych...

Więc sprawdźmy co da się tutaj zrobić ;-) O ile zaraz ktoś mnie nie wyprzedzi.

Zakładamy, że masz do dyspozycji 5 plików o charakterystycznej nazwie wpis%id (w przypadku jedynki bez %id).

  1. <?php
  2. // tablica z plikami
  3. $aFiles = array(
  4. 1 => 'wpis.txt',
  5. 2 => 'wpis2.txt',
  6. 3 => 'wpis3.txt',
  7. 4 => 'wpis4.txt',
  8. 5 => 'wpis5.txt'
  9. );
  10.  
  11. // zadeklarowanie ilości plików
  12. $iFilesCount = count( $aFiles );
  13.  
  14. // generowanie losowego pliku
  15. $iFileId = rand( 1, $iFilesCount );
  16.  
  17. // deklaracja uchwytu pliku
  18. $rFile = fopen( $aFiles[$iFileId], 'r' );
  19.  
  20. // odczyt pliku
  21. $sBody = fread( $rFile, file_size( $aFiles[$iFileId] ) );
  22.  
  23. echo $sBody;
  24. ?>


c.d.n Zaraz dopiszę reszte... (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

EDIT:

Więc teraz kwestia zamiany znaków końca linii:

Przed wyświetleniem zmiennej $sBody należy wpisać następujący kod:
  1. <?php
  2. $sBody = str_replace( array("rn", "n", "r"), "<br />", $sBody );
  3. ?>


Co do ostatniego pytania o losowe linie, to zostawiam to jako zadanie domowe... żebym nie był taki dobry ;p
Podpowiem oczywiście, że można te linie które już były wyświetlone wrzucać do tablicy
  1. <?php
  2. $aExample[] = $iLine; // doda automatycznie nowy element tablicy
  3. ?>


... a później sprawdzać przy pomocy funkcji array_key_exists() czy dany element (linia) znajduje się już w tablicy.

Ten post edytował MagnuM 5.08.2006, 21:46:37
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 20:59