Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dlaczego wykonują się instrukcje które nie powinny?
Forum PHP.pl > Forum > PHP
centrum2954
Witam

Z góry przepraszam za temat, ale nie wiem jak nazwać ten problem

A więc tak:

Jakaś pętla
  1. <?php
  2. {
  3.  
  4. case 'la':
  5.  
  6. LA LA LA LA
  7.  
  8. break;
  9.  
  10. case 'd':
  11. if ($ddk==$ddi) {
  12. $dda.=" + " . $dds . " + " . $ddp . ":";
  13. $dde = explode(":", $dda);
  14. print ($dde[$ddi]);
  15. $ddi++;
  16. }
  17. break;
  18.  
  19. }
  20. ?>

Kiedy uruchamiam strone i ma się wykonywać tylko case 'la' to case 'd' też się wykonuje i dopisuje do ciągu $dda zmienne $dds i $ddp, ale zmienna $ddi zwiększa się dokładnie o tyle ile razy wywołane zostanie case 'd'.

Dlaczego do zmiennej $dda nie dopiszą się dane tyle razy, ile razy zwiększyła się zmienna $ddi, tylko tyle razy ile razy wykona się cała pętla?

Mam nadzieje że zrozumiale to napisałem.

Pozdrawiam


-------------------------
używamy poprawnego BBCode
Teraz poprawiłem, ale proszę pamiętać na przyszłość
~Cienki1980
Cienki1980
Niestety nie za wiele zrozumiałem o co chodzi i w czym jest problem.
Piszesz o fragmencie pętli, a pokazujesz fragment kodu od switch...case

Pokaż więcej kodu, całą pętle ( czy też tego switcha ) bo bez tego ciężko cokolwiek wywnioskować.
SongoQ
Co tam robi LA LA LA? No chyba ze Twoj program ma dzialac spiewajaco tongue.gif
centrum2954
hmm, nie wiem czy to pomoże ale wygląda to mniej więcej tak:

  1. <?php
  2.  
  3.  
  4. switch($ssa){
  5.  
  6. case 'la':
  7.  
  8. LA LA LA LA
  9.  
  10. break;
  11.  
  12. case 'd':
  13. if ($ddk==$ddi) {
  14. $dda.=" + " . $dds . " + " . $ddp . ":";
  15. $dde = explode(":", $dda);
  16. print ($dde[$ddi]);
  17. $ddi++;
  18. }
  19. break;
  20.  
  21.  
  22. }
  23.  
  24. ?>




i teraz jeśli zmienna $ssa przyjmie wartość: d, to wszystko jest ok, czyli: do zmiennej $dda dopisane zostaną zmienne $dds i ddp i zmienna $ddi zwiększy się o 1.

Natomiast jak $ssa przyjmie wartość: la
to do zmiennej $dda też zostanią dodane zmienne $dds i $ddp (a nie powinny) i $ddi nie zwiększy sie o 1 (czyli tu wszysyko jest ok)

EDIT: aha dodam jeszcze że jak zmienna $ssa ma wartość la to nie wyświetka zmiennej $ dde ( print ($dde[$ddi]); ) czyli weszytko jest git, tylko dlaczego on dopisuje coś do zmiennej $dda jak zmienna $ssa=la?
Saddam92
nie wiem co to jest to LA LA LA ale nie ma po tym średnika (winksmiley.jpg... przez co prawdopodobnie z instrukcja break sa jakies problemy..
centrum2954
Cytat(Saddam92 @ 4.03.2007, 14:08:20 ) *
nie wiem co to jest to LA LA LA ale nie ma po tym średnika (winksmiley.jpg... przez co prawdopodobnie z instrukcja break sa jakies problemy..


Nie no bez przesady, LA LA LA to poprostu inny fragment kody w którym pobierane i wyświetlane są dane z jakiegoś pliku, zresztą z tego co mi wiadomo case działa dopuki nie pojawi się break.

Ale cały problem polega na tym że $ddi++ działa poprawnie a $dda.="coś tam" nie, mimo że sa praktycznie w tym samym miejscu w kodzie
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.