Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem ze zrozumieniem działania pętli w PHP
gwiazdka_root
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.01.2013
Skąd: Warszawa

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


Witam serdecznie (IMG:style_emoticons/default/smile.gif)

Uczę się PHP i mam problem z pętlami. Wiem, że może się wam to wydac niedorzeczne, ale po prostu nie potrafię ich zrozumieć. Teorię i składnię znam, ale nie potrafię wykorzystać tego w praktyce i poegam na najprostszych zadaniach. Nie wiem w czym dokładnie tkwi problem. Może w tym, że nie rozumiem zasad ich działania, nie wiem jak zagnieżdżać jedne w drugich. Z if nie mam takiego problemu.
Prosze o jakieś rady i wskazówki. Najlepiej jakby mi ktoś to bardzo łopatologicznie wytłumaczył. Posiadam książki, przeczesywałam internet, ale wszytsko na nic, jeżeli ktoś mi tego nie wytłumaczy ludzkim językiem.
Dlatego zwracam się do was - starych wyjadaczy z prośba o pomoc.

Pozdrawiam,
Kasia
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 23)
CuteOne
post
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%)
-----


Pętle to najzwyczajniej na świecie powtarzanie n+1 razy tego co znajduje się w ciele pętli (pomiędzy klamrami { }). Powtarzana jest aż do momentu spełnienia warunku
  1. $a = false;
  2. $i = 0;
  3.  
  4. while($a === false) { // powtarzaj jeżeli $a jest równe fałszowi
  5.  
  6. echo $i.'<br>';
  7.  
  8. if($i>5) {
  9. $a=true;
  10. }
  11.  
  12. $i++;
  13. }
  14.  
  15.  
  16. for($i=0; $i<=5; $i++) { //powtarzaj do puki $i będzie równe 5
  17.  
  18. echo $i."<br>";
  19. }
  20.  
  21.  
  22. $array = array('a', 'b', 'c');
  23.  
  24. foreach($array as $klucz => $wartosc) { // powtarzaj tyle razy ile tablica posiada elementów + zapisz do zmiennej $klucz - index tablicy, $wartosc - wartość pod danym kluczem
  25.  
  26. echo $klucz.' -> '.$wartosc.'<br>';
  27. }


pętla w pętli
  1. for($i=1; $i<=10; $i++) {
  2.  
  3. for($x=1; $x<=10; $x++) {
  4.  
  5. echo $i.' - '.$x.'<br>';
  6. }
  7. }
Go to the top of the page
+Quote Post
gwiazdka_root
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.01.2013
Skąd: Warszawa

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


Dziękuję za szybką odpowiedź.

Chciałabym sie dowiezieć, czy dobrze zrozumiałam napisany przez ciebie kod....

Zmienna a jest fałszywa. Zmienna i jest równa 0.
Wykonuj pętlę, dopóki a jest równe fałszowi.
Wyświetl zmienną i, która równa jest 0.
Jeżeli 0 jest większe od 5 to zmienna a jest prawdziwa, poczym zwiększ jej wartość o jeden.

następny przykład to wypisanie serii liczb.
$i - 0 i jeżeli jest <= 5 to wyświetl ją zwiększając o jeden.

Tablica ma wartości a,b,c.
Dla każdego elementu z tablicy przypisany jest klucz i wartość
Wyświetl zatem klucz oraz wartość.

Następny przykład to odliczanie od 1 -10.
Wyświetli się ciąg znaków ' - ' dziesięc razy.

Mam nadzieję, że dobrze zinterpretowałam, jeśli nie proszę o wskazanie moich błędów.
Go to the top of the page
+Quote Post
CuteOne
post
Post #4





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

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


1. Dobrze
2. $i jest równe 0; powtarzaj do puki $i będzie mniejsze lub równe 5; zwiększ $i o jeden. W ciele pętli wyświetl $i
3. dobrze
4. wynik powinien wyglądać tak
1 -> 1
1 -> 2
1 -> 3
...
10 -> 1
10 -> 2
..

w sumie ciało drugiej pętli wykona się 100 razy (10 z pierwszej * 10 z drugiej)
Go to the top of the page
+Quote Post
Night123
post
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 2
Dołączył: 21.01.2013

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


Oke moja kolej (IMG:style_emoticons/default/smile.gif)

for
Zmienna $i wynosi 0, a ty potrzebujesz wyniku 4

mogłaś napisać to w if, ale do działania w którym to klient (użytkownik) coś podaje i to co poda trzeba zwiększyć może pojawić się błąd, bo nie wiesz ile musisz powiększać itd i tu masz pętle for

postać:

Kod
for (wyrażenie_inicjujące; wyrażenie_warunkowe; wyrażenie iteracyjne)

  instrukcja;


INSTRUKCJA:

wyrażenie_inicjujące — wyrażenie, którego zadaniem jest zwykle ustalenie warunku początkowego (warunków początkowych) pętli;

wyrażenie_warunkowe — od jego wartości (true lub false) zależy, czy pętla będzie wykonywana dalej, czy też zostanie zakończona;

wyrażenie_iteracyjne — zwykle jest to instrukcja modyfikująca licznik pętli, czyli wpływająca na kontynuację lub zakończenie pętli (licznik pętli jest często sprawdzany w wyrażeniu_warunkowym);

instrukcja — instrukcja (prosta lub złożona) stanowiąca tzw. ciało pętli — jest to kod, który będzie powtarzany w pętli.



czyli

wyrażenie_inicjujące - to nasze $i = 0

wyrażenie_warunkowe - to to kiedy się skończy pętla czyli $i = 4 skończy się gdy $i będzie równe 4

wyrażenie_iteracyjne - co się ma dziać dopóki nie ma tego 4


przykład

  1. for ($i = 0; $i = 4; $i++) {
  2.  
  3. echo "$i";


coś takiego (IMG:style_emoticons/default/wink.gif) powinno wyjść 4

While

To też jest łatwe (IMG:style_emoticons/default/wink.gif) używasz tego wtedy kiedy nie wiesz lub nie chcesz wiedzieć ile razy ma coś się powtórzyć ma być tylko to co chcesz.

Postać
Kod
while (warunek)

  instrukcja;



pętla while wykonuje się tak długo, jak długo warunek jest spełniony.

czyli przykładzik

  1.  
  2. $i = 0;
  3.  
  4. while ($i = 4) {
  5.  
  6. echo "$i";
  7.  
  8. }


i powinno być 4 będzie $i się powiększało aż będzie równe 4 (IMG:style_emoticons/default/smile.gif)

do…while

Pętla do…while jest modyfikacją pętli while. Postać jest ta sama tylko warunek jest sprawdzany ciągle po wykonaniu ciała.


Postać:
Kod
do {

  instrukcja;

} while (warunek);



czyli

  1. $i = 0;
  2.  
  3. do {
  4.  
  5. echo "$i";
  6.  
  7. } while ($i = 4);



Będzie sprawdzało się co każde wykonanie ciała pętli czy jest już odpowiedni wynik.

Pisałem na szybko może się przyda jak nic nie rozumiesz, bo napisałem bez ładu i składu to sorki
Go to the top of the page
+Quote Post
gwiazdka_root
post
Post #6





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.01.2013
Skąd: Warszawa

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


A mógłbyś mi wytłumaczyć dlaczego w zagniżdżeniu wykonywane jest mnożenie 10 * 10?

Cytat(Night123 @ 31.01.2013, 09:07:14 ) *
Oke moja kolej (IMG:style_emoticons/default/smile.gif)

for
Zmienna $i wynosi 0, a ty potrzebujesz wyniku 4

mogłaś napisać to w if, ale do działania w którym to klient (użytkownik) coś podaje i to co poda trzeba zwiększyć może pojawić się błąd, bo nie wiesz ile musisz powiększać itd i tu masz pętle for

postać:

Kod
for (wyrażenie_inicjujące; wyrażenie_warunkowe; wyrażenie iteracyjne)

  instrukcja;


INSTRUKCJA:

wyrażenie_inicjujące — wyrażenie, którego zadaniem jest zwykle ustalenie warunku początkowego (warunków początkowych) pętli;

wyrażenie_warunkowe — od jego wartości (true lub false) zależy, czy pętla będzie wykonywana dalej, czy też zostanie zakończona;

wyrażenie_iteracyjne — zwykle jest to instrukcja modyfikująca licznik pętli, czyli wpływająca na kontynuację lub zakończenie pętli (licznik pętli jest często sprawdzany w wyrażeniu_warunkowym);

instrukcja — instrukcja (prosta lub złożona) stanowiąca tzw. ciało pętli — jest to kod, który będzie powtarzany w pętli.



czyli

wyrażenie_inicjujące - to nasze $i = 0

wyrażenie_warunkowe - to to kiedy się skończy pętla czyli $i = 4 skończy się gdy $i będzie równe 4

wyrażenie_iteracyjne - co się ma dziać dopóki nie ma tego 4


przykład

  1. for ($i = 0; $i = 4; $i++) {
  2.  
  3. echo "$i";


coś takiego (IMG:style_emoticons/default/wink.gif) powinno wyjść 4



Czyli mam rozumieć, że pętla zaczyna działać dopiero po przejściu przez wyrażenie warunkowe, potem wykonywane sa instrukcje, a na zakończenie wykonywane jest wyrażenie iteracyjne?

Jeśli chodzi o while i do... while to różnica jest tylko w tym, że w do... while warunki są sprawdzane na początku?




Chodzi mi też głównie o to, że nie potrafię sobie poradzić z naprawdę prostymi zadaniami takimi jak:

***Napisac program wyswietlajacy losowe liczby z przedzialu 0-10 do momentu az ich suma wyniesie 50.***

***Napisac program wyswietlajacy 5 losowych liczb z przedzialu od 0 do 100 i podajacy ich sume.***

***Napiszemy skrypt, który wyswietli X ciągów liczb od zera do dwudziestu (gdzie X będzie wyznaczała zmienna $ilosc). Jeśli $ilosc będzie mniejsza od zera, wyświetlimy X ciągów od dwudziestu do zera (X oznaczymy jako "- $ilość"). Jeżeli $ilosc będzie równa 0, wyświetlimy komunikat o braku ciągów.***

***Stosując pętle while, warunek if i modulo napisz kod wypisujący wszystkie liczby parzyste od 0 do 1000 włącznie.***

***Napisz kod stosując pętlę do..while, który wyświeli napisy: liczba1 liczba2 liczba3 liczba4 itd. ,aż do liczba456.***


***Wyświetl wszystkie liczby nie podzielne przez 3 z zakresu od 799 do 841 stosując continue i break.***

Pomimo, że pod ćwiczeniami z linku widnieją kody, to i tak po przeanalizowaniu, nie potrafię sama tego napisać

http://gajdaw.pl/php/petla-for-cwiczenia/p3.html


Nie chodzi mi o to, żebyście napisali za mnie te zadania, tylko żebyście mogli mi je wytłumaczyć w sposób przystępny i zrozumiały, tak, żebym sama mogła to zrobić i zrozumieć.
Kilku krotnie przymierzałam się do ich wykonania, lecz nie mam pojęcia czemu nie potrafię ich wykonać mimo iż znam składnie poleceń... (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
CuteOne
post
Post #7





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

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


to nie mnożenie (IMG:style_emoticons/default/smile.gif)

pętla pierwsza wykona się 10 razy

pętla nr. 2 wykona się 10 razy

za każdym powtórzeniem pętli nr. 1 wykona się 10 powtórzeń pętli nr. 2 w sumie 100 razy (10 pierwszej * 10 drugiej)


te zadania są dość nieżyciowe (IMG:style_emoticons/default/smile.gif) więc, może podam takie, z których sam kiedyś się uczyłem

1. za pomocą pętli for() wypisz wszystkie elementy tablicy (podpowiedź, użyj count())
  1. $array = array(1,2,3,4,5,6,7);


2. za pomocą pętli for() stwórz tablicę, która będzie posiadała wszystkie wartości z przedziału 0-10 (podpowiedź $array[$klucz] = $wartość)

To samo zrób używając pętli foreach() i while()
Go to the top of the page
+Quote Post
!*!
post
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Uzupełnienie tego co opisali wyżej.
Go to the top of the page
+Quote Post
pyro
post
Post #9





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


  1.  
  2. // Zwykła pętla
  3.  
  4. for($i=1; $i<=10; $i++) // Zaczynając od $i równego 1 ($i=1), zwiększaj $i o jeden ($i++) tak długo, jak $i jest mniejsze lub równe 10 ($i <= 10)
  5. {
  6. echo $i.'<br />'; // Wyświetl aktualne $i
  7. }
  8.  
  9. echo '<br /><br /><br />';
  10.  
  11. // Pętla zagnieżdzona
  12.  
  13. for($i=1; $i<=10; $i++) // Zaczynając od $i równego 1 ($i=1), zwiększaj $i o jeden ($i++) tak długo, jak $i jest mniejsze lub równe 10 ($i <= 10)
  14. {
  15. echo $i.'<br />'; // Wyświetl aktualne $i
  16.  
  17. for($e=10; $e>=0; $e--) // Zaczynając od $e równego 10 ($e=10), zmniejszaj $e o jeden ($e--) tak długo, jak $e jest większe lub równe 0 ($e >= 0)
  18. {
  19. echo '<span style="color: red;">'.$e.'</span><br />';
  20. }
  21.  
  22. }
  23.  


Przeczytaj kod i jego komentarze, uruchom cały ten kod a zrozumiesz. Prościej chyba się nie da.

Ten post edytował pyro 31.01.2013, 10:19:05
Go to the top of the page
+Quote Post
phpion
post
Post #10





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@Night123:
Zanim zaczniesz uczyć innych sugeruję najpierw douczyć siebie. Poczytaj czym jest drugie wyrażenie w forze bo na pewno nie tym co napisałeś. Poczytaj o różnicach między = a ==. Dodatkowo radzę zwiększać liczniki w pętlach. Poza tym Twoje przykłady zapętlą się w nieskończoność.
Go to the top of the page
+Quote Post
pyro
post
Post #11





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


// ADD

Cytat(gwiazdka_root @ 31.01.2013, 08:26:03 ) *
Kasia


Cytat
http://olgarojek.daportfolio.com/


Coś tu brzydko pachnie.
Go to the top of the page
+Quote Post
gwiazdka_root
post
Post #12





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.01.2013
Skąd: Warszawa

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


phpion to ja już nic nie rozumiem.... piszesz do kolegi:

Zanim zaczniesz uczyć innych sugeruję najpierw douczyć siebie. Poczytaj czym jest drugie wyrażenie w forze bo na pewno nie tym co napisałeś. Poczytaj o różnicach między = a ==. Dodatkowo radzę zwiększać liczniki w pętlach. Poza tym Twoje przykłady zapętlą się w nieskończoność.

W końcu ja sama się zapętliłam i nie wiem co robć... :



Cytat(pyro @ 31.01.2013, 10:14:39 ) *
// ADD





Coś tu brzydko pachnie.



Na drugie mam Kasia, a Olga mi się nie podoba, ale niestety muszę go formalnie używać... Dlatego wszędzie dzie się da i wszystcy mówią do mnie Kasia (IMG:style_emoticons/default/smile.gif)



Cytat(!*! @ 31.01.2013, 10:02:21 ) *
Uzupełnienie tego co opisali wyżej.



Ten materiał także już przerabiałam... Nie wiem co jest ze mną nie tak, że pomimo znajomości składni, nie potrafię jej wprowadzić w życie. Łączyć, dopasowywać odpowiednich instrukcji do zadań.
Ślęczę teraz nad zadaniami od kolegi CuteOne i ni hu hu nie wiem jak to zrobić.... z pierwszego wyszło mi coś takowego:

  1. <?php
  2.  
  3. $array = array(1,2,3,4,5,6,7,);
  4.  
  5. for($i=0; $i<=7; $i++)
  6. {
  7. $wynik = count ($array);
  8. echo $i."<br/>;
  9.  
  10. }
  11. ?>


Według localhosta wyszło tak:

1
2
3
4
5
6
7

I chyba koledze o to właśnie chodziło (mam nadzieję)



Ten post edytował gwiazdka_root 31.01.2013, 10:51:20
Go to the top of the page
+Quote Post
CuteOne
post
Post #13





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

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


1. Manual twoim przyjacielem - count()
2. Zadanie jest poprawnie wykonane ale co gdy nie znasz ilości elementów tablicy?

  1. $array = array(1,2,3,4,5...);
  2. $cnt = count($array);
  3.  
  4. for($i=0; $i<=$cnt; $i++) {
  5.  
  6. echo $i.' '.$array[$i].'<br>';
  7. }


teraz wykonaj to samo dla pętli foreach i while. Na monitorze ma się wyświetlić klucz i wartość pod danym kluczem (tak jak w powyższym przykładzie).


Jak już ogarniesz powyższe zadanie to przejdź do zagnieżdżeń pętli w pętli np. mam tablicę wielowymiarową
  1. $array = array(
  2. 'tak' => array('wiem', 'wiedzą'),
  3. 'nie' => array('patrz', 'teraz'),
  4. 'aha' => 'ok'
  5. );


Zadanie to wyrzucić na ekran wszystkie wartości z tej tablicy za pomocą pętli
podpowiedź-aby sprawdzić czy dana wartość jest tablicą is_array()


Ten post edytował CuteOne 31.01.2013, 11:24:03
Go to the top of the page
+Quote Post
pyro
post
Post #14





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Blisko, ale wywołaj jeszcze taki kod:

  1. $array = array(1,2,3,4,5,6,7);
  2.  
  3. foreach($array as $key=>$val)
  4. {
  5. echo $key.' => '.$val.'<br />';
  6. }
  7.  


I zobacz jak wyglądają klucze w tej tablicy.
Go to the top of the page
+Quote Post
gwiazdka_root
post
Post #15





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.01.2013
Skąd: Warszawa

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


Cytat(CuteOne @ 31.01.2013, 11:18:53 ) *
teraz wykonaj to samo dla pętli foreach i while. Na monitorze ma się wyświetlić klucz i wartość pod danym kluczem (tak jak w powyższym przykładzie).




Z foreach mi wyszło :

  1. <?php
  2.  
  3. //4.
  4.  
  5. $tab = array(1,2,3,4,5,6,7);
  6. foreach($tab as $key => $value)
  7. {
  8. echo "tab[$key] = $value </br>";
  9. };
  10.  
  11.  
  12. ?>


tab[0] = 1
tab[1] = 2
tab[2] = 3
tab[3] = 4
tab[4] = 5
tab[5] = 6
tab[6] = 7


Ale z while mam już problem i nie potrafię do tego dojść....

  1. <?php
  2.  
  3. //5.
  4.  
  5. $tab = array(1,2,3,4,5,6,7);
  6. while($tab <=7)
  7. {
  8. echo "tablica ma wartości[tab = $tab]";
  9. echo "<br/>";
  10. $tab++;
  11. }
  12. ?>


Aby tego było mało próbowałam zrobić jeszcze jedno ćwiczenie, ale wyskakuje mi błąd, że zmiene $key i $value sa niezdefiniowane... (IMG:style_emoticons/default/sad.gif)

  1. <?php
  2.  
  3. //2. za pomocą pętli for() stwórz tablicę, która będzie posiadała wszystkie wartości z przedziału 0-10 (podpowiedź $array[$klucz] = $wartość)
  4.  
  5. $array = array(0,1,2,3,4,5,6,7,8,9,10);
  6.  
  7. for($i=0; $i<=10; $i++)
  8. {
  9. $array[$key] = $value;
  10. echo $key. "wartosci tablicy" . $value."<br/>";
  11. }
  12. ?>
Go to the top of the page
+Quote Post
CuteOne
post
Post #16





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

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


Pętle "działają" do puki jest spełniony warunek. W while masz podstawowy błąd - wykonaj pętle jeżeli tablica jest mniejsza od 7.

  1. $array = array(0,1,2,3,4,5,6);
  2. $cnt = count($array)-1; // indeksy w tablicach zaczynają się od 0, count natomiast zwraca ilość elementów począwszy od 1 ( stąd -1 )
  3. $i = 0;
  4.  
  5. while($i <= $cnt) {
  6.  
  7. echo $i.' '.$array[$i];
  8. $i++;
  9. }


Co do pętli for().. odpowiedź jest dość prosta - nie masz nigdzie zadeklarowanej zmiennej $key i $value. W tym wypadku kluczem jest $i a wartością $array[$i]
  1. $array = array(0,1,2,3,4,5,6,7,8,9,10);
  2.  
  3. for($i=0; $i<=10; $i++)
  4. {
  5. echo $i. "wartosci tablicy" . $array[$i]."<br/>";
  6. }



Myślę, że dobrze ci idzie i niedługo pojmiesz sens pętli a gdy do tego dojdzie rozwiąż to zadanie

Jasio posiada tablicę wielowymiarową
  1. $array = array(
  2. 'ssak' => array('wieloryb', 'kukułka', 'nietoperz'),
  3. 'ptak' => array('bocian', 'aligator', 'struś', 'kukułka')
  4. );

zadaniem Jasia jest usunąć zwierzęta nie pasujące do danego zbioru. Ma to wykonać za pomocą zagnieżdżonych pętli foreach() a następnie wyświetlić wynik działania w kolejnych zagnieżdżonych pętlach

Do usunięcia używamy unset()
Go to the top of the page
+Quote Post
gwiazdka_root
post
Post #17





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.01.2013
Skąd: Warszawa

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


Próbowała sobie poradzić tym zadaniem, które wcześniej mi podałeś, lecz kombinowałam na wszelkie sposoby, a wyciągnąć wartości się nie udało... (IMG:style_emoticons/default/sad.gif)

  1. <?php
  2.  
  3. //6. Zadanie to wyrzucić na ekran wszystkie wartości z tej tablicy za pomocą pętli podpowiedź-aby sprawdzić czy dana wartość jest tablicą is_array()
  4.  
  5. echo "ZADANIE SZOSTE<br/><br/>";
  6.  
  7. $tablica = array(
  8. 'tak' => array('wiem', 'wiedza'),
  9. 'nie' => array('patrz', 'teraz'),
  10. 'aha' => 'ok'
  11. );
  12.  
  13. if (!is_array($tablica))
  14. {
  15. return false;
  16. }
  17.  
  18. foreach($tablica as $key => $value)
  19. {
  20. echo $key.' -> '.$value.'<br>';
  21.  
  22. }
  23. for($i=0;$i<count($value); $i++)
  24. {
  25. echo $value[$i]."<br/>";
  26. }
  27.  
  28. ?>


Niestety wyszło tak:

tak -> Array
nie -> Array
aha -> ok
o


Coś mi się wydaje, że zbytnio nie rozumiem konstrukcji tej tablicy.

Ten post edytował gwiazdka_root 1.02.2013, 10:29:51
Go to the top of the page
+Quote Post
!*!
post
Post #18





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


  1. $tablica = array(
  2. 'tak' => array('wiem', 'wiedza'),
  3. 'nie' => array('patrz', 'teraz'),
  4. 'aha' => 'ok'
  5. );
  6.  
  7.  
  8. if(is_array($tablica))
  9. {
  10. foreach($tablica as $key => $value)
  11. {
  12. echo '<div style=color:red>'.$key.'</div>';
  13. if(is_array($value))
  14. {
  15. print_r($value);
  16. }
  17. else
  18. {
  19. echo $value.'</br>';
  20. }
  21. }
  22. }
  23. else
  24. {
  25. echo 'to nie jest tablica.';
  26. }
  27.  


Jeśli chcesz wyświetlić zawartość tablicy, gdy echo wyświetla Array, użyj print_r

Ten post edytował !*! 1.02.2013, 10:41:47
Go to the top of the page
+Quote Post
gwiazdka_root
post
Post #19





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.01.2013
Skąd: Warszawa

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


Teraz już zupełnie zgłupiałam (IMG:style_emoticons/default/withstupidsmiley.gif)

Wyszło mi coś takiego:
tak
Array ( [0] => wiem [1] => wiedza ) nie
Array ( [0] => patrz [1] => teraz ) aha
ok


Czy mogłabym poprosić o analize tego kodu? Myślałam, że trzeba umieścić w nim dwie pętle... :/
Go to the top of the page
+Quote Post
!*!
post
Post #20





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


I dobrze Ci wyszło. Podobnie jak w przypadku Twojego kodu jest ok, poza tym że return był zbędny, a jak już to nie w tym miejscu.

  1. if(is_array($tablica)) // sprawdzasz czy zmienna $tablica to faktycznie tablica
  2. {
  3. foreach($tablica as $key => $value) // pętla, tworzysz zmienne wewnątrz tylko dla niej $key i $value
  4. {
  5. echo '<div style=color:red>'.$key.'</div>'; // wyświetlasz klucz tablicy
  6. if(is_array($value)) // sprawdzacz czy wartość klucza to tablica
  7. {
  8. print_r($value); // wyświetlasz zawartość klucza, jak chcesz się odwołać do dajesz echo $value[0] lub $value[1] itd.
  9. }
  10. else
  11. {
  12. echo $value.'</br>'; // wyświetlasz wartość jeśli nie jest tablicą
  13. }
  14. }
  15. }
  16. else
  17. {
  18. echo 'to nie jest tablica.'; //komunikat gdy zmienna to nie tablica
  19. }


A i wersja z pętlą która wyświetla zawartość jeśli jest tablicą.

  1. if(is_array($tablica)) // sprawdzasz czy zmienna $tablica to faktycznie tablica
  2. {
  3. foreach($tablica as $key => $value) // pętla, tworzysz zmienne wewnątrz tylko dla niej $key i $value
  4. {
  5. echo '<div style=color:red>key: '.$key.'</div>'; // wyświetlasz klucz tablicy
  6. if(is_array($value)) // sprawdzacz czy wartość klucza to tablica
  7. {
  8. print_r($value); // wyświetlasz zawartość klucza, jak chcesz się odwołać do dajesz echo $value[0] lub $value[1] itd.
  9.  
  10. foreach($value as $key) // nowa pętla dla wartości tej poprzedniej
  11. {
  12. echo '<div style=color:green>value: '.$key.'</div>'; // wyświetlenie wartości jeden po drugim
  13. }
  14. }
  15. else
  16. {
  17. echo '<div style=color:green>value: '.$value.'</div>'; // wyświetlasz wartość jeśli nie jest tablicą
  18. }
  19. }
  20. }


Otrzymujesz coś takiego:

key: tak
Array ( [0] => wiem [1] => wiedza )
value: wiem
value: wiedza
key: nie
Array ( [0] => patrz [1] => teraz )
value: patrz
value: teraz

key: aha
value: ok

Ten post edytował !*! 1.02.2013, 11:00:09
Go to the top of the page
+Quote Post
gwiazdka_root
post
Post #21





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.01.2013
Skąd: Warszawa

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


Cytat
Jeśli chcesz wyświetlić zawartość tablicy, gdy echo wyświetla Array, użyj print_r


Mógłbyś mi wytłumaczyć dlaczego tylko jedno print_r jest w użyciu, a reszta do wyświetlania to echo?

Przepraszam za tyle banalnych pytań, ale naprawdę zależy mi żeby to zrozumieć i się nauczyć...
Go to the top of the page
+Quote Post
CuteOne
post
Post #22





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

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


  1. $tablica = array('tak'=>'hej', 'nie'=>array('wiara'=>'brak'), 'bóg');
  2.  
  3. // Pokaż całą tablicę
  4. print_r($tablica);
  5.  
  6. // Pokaż to co znajduje się pod kluczem 'tak'
  7. print_r($tablica['tak']);
  8.  
  9. // Próba wyświetlenia tablicy za pomocą echo
  10. echo $tablica; //zwróci Array
  11. echo $tablica['tak']; zwróci hej ponieważ wartością dla klucza 'tak' jest zwykły tekst (tzw. string)
  12. echo $tablica['nie']; zwroci Array ponieważ wartością dla klucza 'nie' jest tablica
  13. // poprawnie
  14. print_r($tablica['nie']);


Wszystko rozbija się o to aby w zagnieżdżonych pętlach wiedzieć co jest tablicą a co stringiem. Stąd kolega wyżej sprawdzał to za pomocą funkcji is_array()

Hmm, może zamiast dalej drążyć pętle poucz się czegoś innego? A do pętli wróć podczas nauki obsługi baz danych gdzie często będziesz z nich korzystała

W razie pytań jesteśmy do usług (IMG:style_emoticons/default/wink.gif)

Ten post edytował CuteOne 1.02.2013, 12:46:53
Go to the top of the page
+Quote Post
gwiazdka_root
post
Post #23





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.01.2013
Skąd: Warszawa

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


Dziękuję to mi wiele wyjaśniło. A pętle i tablice musze załapać, bo to sa podstawy. Bez programowania strukturalnego do obiektówki nie przejdę niestety. A na zajęciach baz danych jeszcze nie mieliśmy. Na razie zaznajamiamy się z zapytaniami SQL... Wiec chcac czy nie chcac musze nauczyc sie podstaw bo bez tego ani rusz, a ksiazki sa takim jezykiem napisane, ze szkoda gadać... :-/
Go to the top of the page
+Quote Post
!*!
post
Post #24





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


http://phpkurs.pl/ - stary kurs, ale wyjaśnia trochę więcej niż ten z wiki.W dziale HP tu na forum był temat o złych praktykach, warto przeczytać (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 13:36