Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mój skrypt] optymalizacja
Forum PHP.pl > Forum > Gotowe rozwiązania
tomilipin
Witam,
napisałem sobie dziś prosty sktypr do Dużego Lotka, nazwałem go Tata- Lizator tongue.gif (tak... ten emot jest odpowiedni) ale zrobiłem to bardzo prosto, dokładnie tak samo jak działa mój mózg...
Chodzi mi teraz o jakieś wskazówki na temat optymalizacji tegoż skryptu. Jestem pewien że można to samo wykonać w pętlach. Próbowałem oczywiście już wielokrotnie! ale niestety, nie udało mi się... Nie wyskakiwały blędy tylko np. nic nie pojawiało się na stronie, albo skrypt zapętlał się i nie wychodził z FOR albo WHILE.
Ogólnie wiem jak to zrobić w tzw. pseudojęzyku (czyli na ludzkie zrozumienie) ale jak tok myślenia przełożyć na php, to już nie mam pomysłu... Widocznie źle myślę...
Dlatego proszę Was o pomoc, oto cały kod skryptu:
  1. <?php
  2. $liczba[1]=rand(1,49);
  3. $liczba[2]=rand(1,49);
  4. $liczba[3]=rand(1,49);
  5. $liczba[4]=rand(1,49);
  6. $liczba[5]=rand(1,49);
  7. $liczba[6]=rand(1,49);
  8.  
  9. while($liczba[2]==$liczba[1]) {
  10. $liczba[2]=rand(1,49);
  11. }
  12. while($liczba[3]==$liczba[2] or $liczba[3]==$liczba[1]) {
  13. $liczba[3]=rand(1,49);
  14. }
  15. while($liczba[4]==$liczba[3] or $liczba[4]==$liczba[2] or $liczba[4]==$liczba[1]) {
  16. $liczba[4]=rand(1,49);
  17. }
  18.  
  19. while($liczba[5]==$liczba[4] or $liczba[5]==$liczba[3] or $liczba[5]==$liczba[2] or $liczba[5]==$liczba[1]) {
  20. $liczba[5]=rand(1,49);
  21. }
  22.  
  23. while($liczba[6]==$liczba[5] or $liczba[6]==$liczba[4] or $liczba[6]==$liczba[3] or $liczba[6]==$liczba[2] or $liczba[6]==$liczba[1]) {
  24. $liczba[6]=rand(1,49);
  25. }
  26.  
  27. echo &#092;"$liczba[1]<br>\";
  28. echo &#092;"$liczba[2]<br>\";
  29. echo &#092;"$liczba[3]<br>\";
  30. echo &#092;"$liczba[4]<br>\";
  31. echo &#092;"$liczba[5]<br>\";
  32. echo &#092;"$liczba[6]<br>\";
  33.  
  34. ?>


Cały problem tkwi oczywiście w tym, że liczby nie mogą się powtarzać!
PS. skrypt testowany we Flashu (ActionScript) wygląda bardzo fajnie, losuje liczby na bieżąco, widać jak się zmieniają smile.gif
Vertical
MANUAL- for();
MANUAL - while();
MAN powie Ci wszystko...
hwao
  1. <?php
  2.  
  3. function losuj( $arrNie )
  4. {
  5.  $new = rand( 1, 49 );
  6.  while( !in_array( $new, $arrNie ) )
  7.  {
  8.  $new = rand( 1, 49 );
  9.  }
  10.  
  11. return $new;
  12. }
  13. $i = 0;
  14. $arrT = array();
  15. while( 5 == $i )
  16. {
  17.  $i++;
  18.  
  19.  $arrT[] = losuj( $arrT );
  20. }
  21.  
  22. print_r( $arrT );
  23. ?>


Nie wiem czy bedzie dzialac pisane z palca ale zasade masz
tomilipin
Vertical => masz mnie za idiotę? Pisałem przecież że nie daję rady z FOR i WHILE. Ja wiem że z nich trzeba skorzystać, maual php to było pierwsze miejsce gdzie zajrzałem.

hwao => użyłeś funkcji których nie znam więc poczytam o nich, a na razie zostawię Tata- Lizatora

dzięki za pomoc
kszychu
A ja spróbuję pro¶ciej; chodzi przecież o wylosowanie sześciu liczby i by te liczby się nie powtarzały.
  1. <?php
  2.  
  3. $liczby = array();
  4. for($i = 0; $i < 6; $i++) {
  5. do {
  6. $liczba = rand(1, 49);
  7. } while(in_array($liczba, $liczby));
  8. $liczby[] = $liczba;
  9. }
  10. print_r($liczby);
  11.  
  12. ?>
scanner
  1. <?php
  2. /**
  3.  * @return array
  4.  * @param int $iItems
  5.  * @param int $iMax
  6.  * @desc Returns $iItems randomly generated numbers from range (1 - $iMax)
  7.  * @author scanner <scanner@scanner.eu.org>
  8.  * @date 2004/10/08
  9. */
  10. function randomizer( $iItems, $iMax )
  11. {
  12. for ( $i = 1; $i <= $iMax; $i++)
  13. {
  14. $aItems[] = $i;
  15. }
  16. shuffle( $aItems );
  17.  
  18. $aResult = array_chunk( $aItems, $iItems);
  19. return $aResult[0];
  20. }
  21.  
  22. /** Usage **/
  23. $aDrawed = randomizer( 7, 49 );
  24. echo implode( ', ', $aDrawed );
  25. ?>
Vertical
Cytat
Vertical => masz mnie za idiotę?

...Skąd miałem wiedzieć, że zajrzałeś? Uwierz mi, że są ludzie, którzy się pytają zanim zajrzą do manuala.
dr_bonzo
Moja funkcja wylosujesz dowolna ilosc elementow z dowolnego zbioru (tablicy).
  1. <?php
  2. /*
  3.  * @return array
  4.  * @param int $iHowMuchElements -- ile elementow zbioru (tablicy) wylosowac
  5.  * @param int $aElements -- zbior elementow z ktorego losujemy
  6.  * @desc Zwraca $iHowMuchElements losowych elementow ze zbioru $aElements
  7.  * @author Dr Bonzo
  8.  */
  9. function drawElements( $iHowMuchElements, $aElements )
  10. {
  11.     shuffle( $aElements );
  12.     
  13.     for ( $i = 0; $i < $iHowMuchElements; $i++ )
  14.     {
  15.         $aResult[] = array_pop( $aElements ); // lub array_shift
  16.     }
  17.     
  18.     return $aResult;
  19. }
  20.  
  21.  
  22. /* Dla duzego lotka, zbior liczbe calk. [1; 49] */
  23. for ( $i = 0; $i < 49; $i++ )
  24. {
  25.     $aElements_1[ $i ] = $i + 1;    
  26. }
  27.  
  28. $x = drawElements( 6, $aElements_1 );
  29. $xx = implode( ', ', $x );
  30. print( &#092;"$xx<br />\" );
  31.  
  32.  
  33. /* 10 liter z jakiegos tam zakresu [A, questionmark.gif?] */
  34. for ( $i = 0; $i < 24; $i++ )
  35. {
  36.     $aElements_2[ $i ] = chr( 65 + $i );
  37. }
  38.  
  39. $y = drawElements( 10, $aElements_2 );
  40. $yy = implode( ', ', $y );
  41. print( &#092;"$yy<br />\" );
  42.  
  43. ?>


------------------
a teraz spojzcie na to:
Cytat
mixed array_rand ( array input [, int num_req])

array_rand() is rather useful when you want to pick one or more random entries out of an array. It takes an input array and an optional argument num_req which specifies how many entries you want to pick - if not specified, it defaults to 1.

If you are picking only one entry, array_rand() returns the key for a random entry. Otherwise, it returns an array of keys for the random entries. This is done so that you can pick random keys as well as values out of the array.

hehe
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.