Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowanie tablicy
Forum PHP.pl > Forum > PHP
inOs
Zrobiłem z kolega pewien skrypt, założenie jest takie, najpierw wrzucamy informacje o filmiku do pliku txt. Następnie wrzucamy do tablicy kod html, z gotowym filmikiem. A później chcemy wyświetlić 7 losowych filmików.
oto skrypt:

  1. <? 
  2. error_reporting(E_ALL | E_STRICT);
  3.  function linia() 
  4. { 
  5. $licznik = 1; 
  6. $wpis= "filmy.txt"; //tu jest plik z filmikami i informacjami o nim 
  7.  
  8.  
  9. $file=fopen($wpis,'r'); 
  10. $plik=file($wpis); 
  11.  
  12. // sprawdzanie ilosci lini 
  13. $liczba_lini = count($plik);
  14.  
  15. flock($file, 1); 
  16. if ($liczba_lini > 1){ 
  17. if($linia=fgets($file,2000)) 
  18. { 
  19. // pobieranie danych 
  20. $tekst=$linia; 
  21. $tytul = substr($tekst,1, strpos($tekst," `")); 
  22.  
  23. $wyczysc="*"; $wyczysc.=$tytul; 
  24. $tekst=str_replace($wyczysc,"", $tekst); 
  25.  
  26. $data = substr($tekst,1, strpos($tekst," |")); 
  27.  
  28. $wyczysc="`"; $wyczysc.=$data; 
  29. $tekst=str_replace($wyczysc,"",$tekst); 
  30.  
  31. $adres = substr($tekst,1, strpos($tekst," _")); 
  32.  
  33.  $wyczysc="|"; $wyczysc.=$adres; 
  34.  $tekst=str_replace($wyczysc,"",$tekst); 
  35.  
  36. $zdjecie = substr($tekst,1, strpos($tekst," #")); 
  37.  
  38.  $wyczysc="_"; $wyczysc.=$zdjecie; 
  39.  $tekst=str_replace($wyczysc,"",$tekst); 
  40.  
  41. $zdjecie= str_replace(" ","",$zdjecie); 
  42.  
  43. if ($zdjecie!=""){ 
  44. $zdjecie= str_replace("./","",$zdjecie); 
  45. $zdjecie= str_replace(" ","",$zdjecie); 
  46.  
  47. $opis = substr($tekst,1, strpos($tekst," ~")); 
  48.  
  49. }
  50.  
  51. //wyswietlanie danych 
  52. if ($tytul != '' && $zdjecie != '' && $opis != ''){ 
  53.  
  54. //Tu czesc, która wrzuca do tablicy kod HTML 
  55. $tablica[$licznik] = 
  56. <table width=\"20\"
  57.  
  58. <tr> 
  59. <td width=\"1\" style=\"text-valign: top; text-align: left;\"
  60. <a href=\"$adres\"
  61. <img src=\"$zdjecie\"
  62. </a> 
  63. </td> 
  64. <td width=\"20\" style=\"text-valign: top; text-align: left;\"
  65. <a href=\"$adres\"
  66. <font size=3 face=corbel><b> $tytul </b></font><br> 
  67. </a> 
  68. <font size=2 face=verdana> $opis </font><br> 
  69. </td> 
  70.  
  71. </tr> 
  72.  
  73. <tr> 
  74.  
  75. <td colspan=\"2\"
  76. <font size=1><i>$data</i></font><br> 
  77. <img src=\"varia/barra2.png\" /> 
  78. </td> 
  79. </tr> 
  80. </table> 
  81. ";
  82. //echo("$tablica[$licznik]"); 
  83.  
  84.  
  85. $licznik++; 
  86.  
  87.  
  88.  
  89.  
  90. //i po przemieszaniu pobieramy pierwsze 7 elementy 
  91. var_dump($tablica);
  92. for($k=0; $k<7; $k++) {
  93. shuffle($tablica);
  94. echo $tablica[$k]; 
  95. }
  96.  
  97. }}}else echo('<font color=\"red\" size=\"3\">Obecnie nie ma zadnego filmu.</font>');
  98.  
  99. flock($file, 3); 
  100. fclose($file); 
  101.  
  102. } 
  103. linia(); 
  104. ?>

A oto efekt:
http://www.frikiz.com/4u/wpisy.php
Tutaj sie dodaje filmiki:
http://www.frikiz.com/4u/index.php

Gdzie popełniliśmy błąd? proszę o pomoc.
Pozdrawiam
marcio
Zamien to:
  1. <?php
  2. var_dump($tablica);
  3. for($k=0; $k<7; $k++) {
  4. shuffle($tablica);
  5. echo $tablica[$k]; 
  6. }
  7. ?>

Na to:
  1. <?php
  2. var_dump($tablica);
  3. shuffle($tablica);
  4. for($k=0; $k<7; $k++) echo $tablica[$k];
  5. ?>

Patrzylem tylko tam gdzie masz blad smile.gif

P.S blad miales taki ze za kazdym obiegem petli "sortowales" tablice i potem wyswietlales dlatego byl blad z offset ale nie jestem pewny a zreszta jestes pewny ze jest 7 elementow?
piotrooo89
jak otwarłem ten drugi plik to strasznie sie krzaczy...

Kod
Wype^(3)nij poprawnie poni?szy formularz.


popraw kodowanie to taka mała uwaga smile.gif
inOs
Zmienilem to, chyba dobrze?
Ale nie dziala, dalej tak samo:
  1. <? 
  2. error_reporting(E_ALL | E_STRICT);
  3.  function linia() 
  4. { 
  5. $licznik = 1; 
  6. $wpis= "filmy.txt"; //tu jest plik z filmikami i informacjami o nim 
  7.  
  8.  
  9. $file=fopen($wpis,'r'); 
  10. $plik=file($wpis); 
  11.  
  12. // sprawdzanie ilosci lini 
  13. $liczba_lini = count($plik);
  14.  
  15. flock($file, 1); 
  16. if ($liczba_lini > 1){ 
  17. if($linia=fgets($file,2000)) 
  18. { 
  19. // pobieranie danych 
  20. $tekst=$linia; 
  21. $tytul = substr($tekst,1, strpos($tekst," `")); 
  22.  
  23. $wyczysc="*"; $wyczysc.=$tytul; 
  24. $tekst=str_replace($wyczysc,"", $tekst); 
  25.  
  26. $data = substr($tekst,1, strpos($tekst," |")); 
  27.  
  28. $wyczysc="`"; $wyczysc.=$data; 
  29. $tekst=str_replace($wyczysc,"",$tekst); 
  30.  
  31. $adres = substr($tekst,1, strpos($tekst," _")); 
  32.  
  33.  $wyczysc="|"; $wyczysc.=$adres; 
  34.  $tekst=str_replace($wyczysc,"",$tekst); 
  35.  
  36. $zdjecie = substr($tekst,1, strpos($tekst," #")); 
  37.  
  38.  $wyczysc="_"; $wyczysc.=$zdjecie; 
  39.  $tekst=str_replace($wyczysc,"",$tekst); 
  40.  
  41. $zdjecie= str_replace(" ","",$zdjecie); 
  42.  
  43. if ($zdjecie!=""){ 
  44. $zdjecie= str_replace("./","",$zdjecie); 
  45. $zdjecie= str_replace(" ","",$zdjecie); 
  46.  
  47. $opis = substr($tekst,1, strpos($tekst," ~")); 
  48.  
  49. }
  50.  
  51. //wyswietlanie danych 
  52. if ($tytul != '' && $zdjecie != '' && $opis != ''){ 
  53.  
  54. //Tu czesc, która wrzuca do tablicy kod HTML 
  55. $tablica[$licznik] = 
  56. <table width=\"20\"
  57.  
  58. <tr> 
  59. <td width=\"1\" style=\"text-valign: top; text-align: left;\"
  60. <a href=\"$adres\"
  61. <img src=\"$zdjecie\"
  62. </a> 
  63. </td> 
  64. <td width=\"20\" style=\"text-valign: top; text-align: left;\"
  65. <a href=\"$adres\"
  66. <font size=3 face=corbel><b> $tytul </b></font><br> 
  67. </a> 
  68. <font size=2 face=verdana> $opis </font><br> 
  69. </td> 
  70.  
  71. </tr> 
  72.  
  73. <tr> 
  74.  
  75. <td colspan=\"2\"
  76. <font size=1><i>$data</i></font><br> 
  77. <img src=\"varia/barra2.png\" /> 
  78. </td> 
  79. </tr> 
  80. </table> 
  81. ";
  82. //echo("$tablica[$licznik]"); 
  83.  
  84.  
  85. $licznik++; 
  86.  
  87.  
  88.  
  89.  
  90. //i po przemieszaniu pobieramy pierwsze 7 elementy 
  91. var_dump($tablica);
  92. shuffle($tablica);
  93. for($k=0; $k<count($tablica); $k++) echo $tablica[$k];
  94.  
  95.  
  96. }}}else echo('<font color=\"red\" size=\"3\">Obecnie nie ma zadnego filmu.</font>');
  97.  
  98. flock($file, 3); 
  99. fclose($file); 
  100.  
  101. } 
  102. linia(); 
  103. ?>
marcio
  1. <?php
  2. var_dump($tablica);
  3. shuffle($tablica);
  4. for($k=0; $k<count($tablica); $k++) echo $tablica[$k];
  5. ?>

Napisz czy dalej masz bledy

EDIT:Bledow nie ma widzisz wynik var_dump()
array(1) { [1]=> string(594) "

Nie morzesz wziasc 7 index'ow tablicy skoro masz tylko 1 smile.gif musisz sobie to policzyc matematycznie ze jezeli index jest wiekszy niz 6 to wyciagasz 7 filmow
inOs
Dalej tak samo sad.gif Tzw. nie pokazuje juz tych błędów na dole co wczesnej, ale dziwne, bo chyba tego nie losuje tych elementów, takie same caly czas sie wyświetlają ... ostatnio dodany, 2 razy sie wyświetlą, juz duzo ludzi probowało nam pomoc, i cały czas nic, moze to problem z index.php a nie wpisy.php, chodz to malo prawdopodobne...
Aha i Twoim sposobem wyświetli chyba wszystkie filmiki, a ich bedzie bardzo duzo, powinno tylko 7 wyświetlać...
marcio
Przeczytales moj post wyzej
  1. <?php
  2. var_dump($tablica);
  3. shuffle($tablica);
  4. for($k=0; $k<count($tablica); $k++) echo $tablica[$k];
  5. ?>

Tablica $tablica z tego co widac ma tylko 1 index wiec ty cos zle pobierasz nie analizowalem calego kodu zaraz zobacze


P.S pokaz ile cie zwraca $licznik i $tablica[$licznik] bo zdaje mi sie ze zle czytasz dane albo plik ma tylko 1 rekord
inOs
Sry ze długo nie odpisywałem,
http://frikiz.com/4u/wpisy.php
marcio
Z tego co widze to rzeczywiscie tablica nie ma 7 lub wiecej elementow a ma 1-2 smile.gif zreszta widzisz jak sie da count()+dobrze te shuffle() bledow nie ma bo jedziesz dobrze po index'ach

P.S pokarz jak wyglada mniej wiecej ten plik filmy.txt bo zle go wczytujesz jesli kazdy film i jego info sa w nowej lini otwieraj plik za pomoca file() rozbijaja za pomoca explode() i dawaj do tymczasowej tablicy
inOs
http://frikiz.com/4u/filmy.txt

* kljlkjijl ` 18.05.2008 22:19:53 | kkkkkkkkkkkkkkkkk _ ./upload/180508101953_actrenelmo.jpg # kkllll kkkkkkkkkkkkkkkkkkkkkkkkkkkk ~
* gjgjgjkg ` 16.05.2008 21:08:52 | jjjjjjjjjjjjjjjj _ ./upload/160508090852_aclepa.jpg # jjjjhhhhhhhhhhhhhhhhhhhh ~
* gjgjgjkg ` 16.05.2008 21:08:50 | jjjjjjjjjjjjjjjj _ ./upload/160508090850_aclepa.jpg # jjjjhhhhhhhhhhhhhhhhhhhh ~
* gjgjgjkg ` 16.05.2008 21:08:45 | jjjjjjjjjjjjjjjj _ ./upload/160508090845_aclepa.jpg # jjjjhhhhhhhhhhhhhhhhhhhh ~
* gjgjgjkg ` 16.05.2008 21:08:41 | jjjjjjjjjjjjjjjj _ ./upload/160508090841_aclepa.jpg # jjjjhhhhhhhhhhhhhhhhhhhh ~
* gjgjgjkg ` 16.05.2008 21:08:37 | jjjjjjjjjjjjjjjj _ ./upload/160508090837_aclepa.jpg # jjjjhhhhhhhhhhhhhhhhhhhh ~
* sdfghjk ` 16.05.2008 21:08:36 | qwertyu _ ./upload/160508090836_blyskawica1.jpg # qwertyuiop[sdfghjkl;zxcvbnm, ~
Tak wyglada...
em1X
A nie mozesz wczytac tego pliku tekstowego i wybrac losowe elementy przy uzyciu array_rand" title="Zobacz w manualu PHP" target="_manual ?

A linie parsowac chyba lepiej regexpem?
  1. <?php
  2. // przyklad
  3. $linia = '* kljlkjijl ` 18.05.2008 22:19:53 | kkkkkkkkkkkkkkkkk _ ./upload/180508101953_actrenelmo.jpg # kkllll kkkkkkkkkkkkkkkkkkkkkkkkkkkk ~';
  4.  
  5. preg_match('/* (.*?) ` (.*?) | (.*?) _ (.*?) # (.*?) ~/', $linia, $match);
  6.  
  7. for ($i=1; $i<count($match); $i++)
  8. {
  9. print "<b>$match[$i]</b><br />";
  10. }
  11. ?>
marcio
Cytat(inOs @ 20.05.2008, 19:50:08 ) *
http://frikiz.com/4u/filmy.txt

* kljlkjijl ` 18.05.2008 22:19:53 | kkkkkkkkkkkkkkkkk _ ./upload/180508101953_actrenelmo.jpg # kkllll kkkkkkkkkkkkkkkkkkkkkkkkkkkk ~
* gjgjgjkg ` 16.05.2008 21:08:52 | jjjjjjjjjjjjjjjj _ ./upload/160508090852_aclepa.jpg # jjjjhhhhhhhhhhhhhhhhhhhh ~
* gjgjgjkg ` 16.05.2008 21:08:50 | jjjjjjjjjjjjjjjj _ ./upload/160508090850_aclepa.jpg # jjjjhhhhhhhhhhhhhhhhhhhh ~
* gjgjgjkg ` 16.05.2008 21:08:45 | jjjjjjjjjjjjjjjj _ ./upload/160508090845_aclepa.jpg # jjjjhhhhhhhhhhhhhhhhhhhh ~
* gjgjgjkg ` 16.05.2008 21:08:41 | jjjjjjjjjjjjjjjj _ ./upload/160508090841_aclepa.jpg # jjjjhhhhhhhhhhhhhhhhhhhh ~
* gjgjgjkg ` 16.05.2008 21:08:37 | jjjjjjjjjjjjjjjj _ ./upload/160508090837_aclepa.jpg # jjjjhhhhhhhhhhhhhhhhhhhh ~
* sdfghjk ` 16.05.2008 21:08:36 | qwertyu _ ./upload/160508090836_blyskawica1.jpg # qwertyuiop[sdfghjkl;zxcvbnm, ~
Tak wyglada...

Zamiast dawac wszedzie separator dawaj tylko # i koncz linie ~ i to wsio potem rozbijaja albo uzywaj wyrazenia regularne
inOs
Wiemy mniej więcej, gdzie jest juz błąd, bo mieliśmy pętle for, a ja skasowaliśmy, i licznik nie wzrasta, ale jakoś dalej nie działa sad.gif
  1. <? 
  2. error_reporting(E_ALL | E_STRICT);
  3.  function linia() 
  4. { 
  5. $licznik = 1; 
  6. $wpis= "filmy.txt"; //tu jest plik z filmikami i informacjami o nim 
  7.  
  8.  
  9. $file=fopen($wpis,'r'); 
  10. $plik=file($wpis); 
  11.  
  12. // sprawdzanie ilosci lini 
  13. $liczba_lini = count($plik);
  14.  
  15. flock($file, 1); 
  16. if ($liczba_lini > 1){ 
  17. if($linia=fgets($file,2000)) 
  18. { 
  19. for(m=1; m<$liczba_lini; m++){
  20. // pobieranie danych 
  21. $tekst=$linia; 
  22. $tytul = substr($tekst,1, strpos($tekst," `")); 
  23.  
  24. $wyczysc="*"; $wyczysc.=$tytul; 
  25. $tekst=str_replace($wyczysc,"", $tekst); 
  26.  
  27. $data = substr($tekst,1, strpos($tekst," |")); 
  28.  
  29. $wyczysc="`"; $wyczysc.=$data; 
  30. $tekst=str_replace($wyczysc,"",$tekst); 
  31.  
  32. $adres = substr($tekst,1, strpos($tekst," _")); 
  33.  
  34.  $wyczysc="|"; $wyczysc.=$adres; 
  35.  $tekst=str_replace($wyczysc,"",$tekst); 
  36.  
  37. $zdjecie = substr($tekst,1, strpos($tekst," #")); 
  38.  
  39.  $wyczysc="_"; $wyczysc.=$zdjecie; 
  40.  $tekst=str_replace($wyczysc,"",$tekst); 
  41.  
  42. $zdjecie= str_replace(" ","",$zdjecie); 
  43.  
  44. if ($zdjecie!=""){ 
  45. $zdjecie= str_replace("./","",$zdjecie); 
  46. $zdjecie= str_replace(" ","",$zdjecie); 
  47.  
  48. $opis = substr($tekst,1, strpos($tekst," ~")); 
  49.  
  50. }
  51.  
  52. //wyswietlanie danych 
  53. if ($tytul != '' && $zdjecie != '' && $opis != ''){ 
  54.  
  55. //Tu czesc, która wrzuca do tablicy kod HTML 
  56. $tablica[$licznik] = 
  57. <table width=\"20\"
  58.  
  59. <tr> 
  60. <td width=\"1\" style=\"text-valign: top; text-align: left;\"
  61. <a href=\"$adres\"
  62. <img src=\"$zdjecie\"
  63. </a> 
  64. </td> 
  65. <td width=\"20\" style=\"text-valign: top; text-align: left;\"
  66. <a href=\"$adres\"
  67. <font size=3 face=corbel><b> $tytul </b></font><br> 
  68. </a> 
  69. <font size=2 face=verdana> $opis </font><br> 
  70. </td> 
  71.  
  72. </tr> 
  73.  
  74. <tr> 
  75.  
  76. <td colspan=\"2\"
  77. <font size=1><i>$data</i></font><br> 
  78. <img src=\"varia/barra2.png\" /> 
  79. </td> 
  80. </tr> 
  81. </table> 
  82. ";
  83. //echo("$tablica[$licznik]"); 
  84.  
  85.  
  86. $licznik++; 
  87. }}}
  88.  
  89.  
  90. //i po przemieszaniu pobieramy pierwsze 7 elementy 
  91. echo("Tu jest var_dump:");
  92. var_dump($tablica);
  93. echo("<hr> Ponizej powinny bya 7 kolejnych losowych wpisów:");
  94. shuffle($tablica);
  95. //for($k=0; $k<7; $k++) echo $tablica[$k];
  96. echo("<hr> Ponizej sa informacje o zminnej licznik:");
  97. $licznik -=1;
  98. echo("Licznik = $licznik");
  99. echo("tablica[licznik] = $tablica[$licznik]");
  100. echo("<hr> I teraz wszytkie wpisy naraz:");
  101. shuffle($tablica);
  102. for($k=0; $k<count($tablica); $k++) echo $tablica[$k];
  103. }else echo('<font color=\"red\" size=\"3\">Obecnie nie ma zadnego filmu.</font>');
  104. flock($file, 3); 
  105. fclose($file); 
  106.  
  107. } 
  108. linia(); 
  109. ?>

PIsze ze w 19 linii blad, czyli for(m=1; m<$liczba_lini; m++){ to, jakieś pomysły tongue.gif?
marcio
  1. <?php
  2. for(m=1; m<$liczba_lini; m++){
  3. ?>

Co to jest php?? cos bardziej C mi to przypomina gdzie zjadles $??
inOs
http://frikiz.com/4u/wpisy.php
Jakiś postęp, ale dlaczego wyświetla tylko ostatnio dodany filmik? I ich nie sortuje? Jest przecież shuffle... nie czaje...
marcio
Masz napisane
Cytat
Ponizej sa informacje o zminnej licznik:Licznik = 7tablica[licznik] =

Rusz makowa smile.gif

P.S
  1. <?php
  2. $licznik -=1;
  3. ?>

Po co odejmujesz od zmiennej licznik 1??
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.