Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] DO-WHILE, Problem z funkcją.
Tomplus
post 25.10.2010, 14:38:04
Post #1





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


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.

Ten post edytował Tomplus 25.10.2010, 15:53:07
Go to the top of the page
+Quote Post
CuteOne
post 25.10.2010, 14:53:44
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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 ]";


Ten post edytował CuteOne 25.10.2010, 14:54:03
Go to the top of the page
+Quote Post
markonix
post 25.10.2010, 14:55:54
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


  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

Ten post edytował markonix 25.10.2010, 14:57:22


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 25.10.2010, 15:11:36
Post #4





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


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


Ten post edytował Tomplus 25.10.2010, 15:12:35
Go to the top of the page
+Quote Post
markonix
post 25.10.2010, 15:16:57
Post #5





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


To z ciekawości spytam teraz JA co miałem źle (tzn. co poprawiłeś)? smile.gif


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 25.10.2010, 15:22:39
Post #6





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Po zakończonym IF miałeś średnik smile.gif
Go to the top of the page
+Quote Post
markonix
post 25.10.2010, 15:25:13
Post #7





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Fiu, fiu. Racja.

Ale problem rozwiązany chyba to oznacz odpowiednio temat winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 25.10.2010, 15:32:04
Post #8





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Problem będzie rozwiązany gdy dostanę odpowiedź na moje pytanie.

A pytanie dot. funkcji mojej i CuteOne.
Go to the top of the page
+Quote Post
markonix
post 25.10.2010, 15:41:08
Post #9





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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.


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 25.10.2010, 15:51:03
Post #10





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


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.

Ten post edytował Tomplus 25.10.2010, 15:52:25
Go to the top of the page
+Quote Post
markonix
post 25.10.2010, 16:02:34
Post #11





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 04:05