Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] DO-WHILE
Forum PHP.pl > Forum > PHP
Tomplus
Witam.

Mam następujący skrypt:
  1. do if( !in_array($rep[rand(1,32)], $repr) ) $los = $rep[$rand];
  2. while($los);
  3. echo "Wylosowana: [ $los ]";



a tutaj tablice.
  1. //tablica wygenerowana ręcznie
  2. $rep = array ('','Polska',"RPA","Meksyk","Urugwaj","Francja", "Argentyna", "Nigeria", "Korea Południowa","Grecja", "Anglia", "USA", "Irlandia Północna", "Algeria", "Niemcy", "Australia", "Serbia", "Ghana", "Holandia", "Dania", "Japonia", "Kamerun", "Włochy", "Paragwaj", "Nowa Zelandia", "Wybrzeże Kości Słoniowej", "Portugalia", "Brazylia", "Korea Północna", "Honduras", "Chile", "Hiszpania", "Szwajcaria");
  3. //tablica wygenerowana z bazy danych
  4. $repr = array ('','','','','','','','','','','','','','','','','','','','','','','Grecja','','','','','','','','','','','','','','Polska','','','','','','','','','','','','Dania','','','','','','','','','','','','','','','','','','','','','');



Wynik powinien być prosty:
Wylosowana [ XXXXX ] ale w zmiennej $los nic się nie pokazuje.

Jednak robiąc to samo BEZ do-while działa tak jak trzeba, ale nie spełnia mojego zadania, aby funkcja losowała dopóki nie wylosuje kraju którego nie ma w tablicy $repr.

W nast. przykładzie nie powinno być problemu z wylosowaniem takiego kraju.
CuteOne
Sprawdź
  1. do {
  2. $rand = rand(1,32);
  3. if( !in_array($rep[$rand], $repr) )
  4. $los = $rep[$rand];
  5. else
  6. echo $rep[$rand]."<br>";
  7. }
  8. while(empty($los));
  9. echo "Wylosowana: [ $los ]";
markonix
  1. while(!$cos) {
  2. $index = rand(1,32);
  3. $zmienna = $rep[$index];
  4. if(!in_array($zmienna,$repr);
  5. {
  6. echo 'Znalazłem kraj:' . $zmienna;
  7. $cos = true;
  8. }
  9. }


Może o to chodzi?

Edit: spóźnienie smile.gif
Tomplus
Cytat(CuteOne @ 25.10.2010, 15:53:44 ) *
Sprawdź
  1. do {
  2. $rand = rand(1,32);
  3. if( !in_array($rep[$rand], $repr) )
  4. $los = $rep[$rand];
  5. else
  6. echo $rep[$rand]."<br>";
  7. }
  8. while(empty($los));
  9. echo "Wylosowana: [ $los ]";


Powiedz mi dlaczego Twój skrypt działa, a mój nie, skoro prócz funkcji empty() są praktycznie identyczne ?




Cytat(markonix @ 25.10.2010, 15:55:54 ) *
Może o to chodzi?

Edit: spóźnienie smile.gif




Trochę błędów w Twoim poscie, ale po poprawie, skrypt dziala.
  1. while(!$cos)
  2. {
  3. $index = rand(1,32);
  4. $zmienna = $rep[$index];
  5. if(!in_array($zmienna,$repr))
  6. {
  7. echo 'Znalazłem kraj:' . $zmienna;
  8. $cos = true;
  9. }
  10. }
markonix
To z ciekawości spytam teraz JA co miałem źle (tzn. co poprawiłeś)? smile.gif
Tomplus
Po zakończonym IF miałeś średnik smile.gif
markonix
Fiu, fiu. Racja.

Ale problem rozwiązany chyba to oznacz odpowiednio temat winksmiley.jpg
Tomplus
Problem będzie rozwiązany gdy dostanę odpowiedź na moje pytanie.

A pytanie dot. funkcji mojej i CuteOne.
markonix
Hm.. Jest tam np. zmienna $rand bez żadnej deklaracji wartości.
Poza tym dla lepszej analizy porobiłbym tam parę tabulatorów i enterów - lepiej się czyta.
Klamerka obejmująca zawartość pętli też nie zaszkodzi.
Tomplus
Własnie ja mam taką zasadę: aby nie używać zbędnych znaków.
Klamry są potrzebne jeżeli jest więcej niż jedna rzecz do obsłużenia i automatycznie pojawiają się entery i tabulatory.

Ale z tym $rand masz racje ... tutaj jest pies pogrzebany. Wielkie dzięki biggrin.gif

Drobiazgi zawsze szybciej zobaczy ktoś inny niż my sami.
markonix
Dla mnie to są niezbędne znaki smile.gif
Dodam tylko, że ta druga tablica nie musi być wypełniona tymi pustymi ciągami.
Wystarczą 3 elementy - 3 kraje, in_array zadziała tak samo.
W komentarzu napisałeś, że ta tablica jest ręcznie napisana dlatego trochę mnie dziwi jej konstrukcja.
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.