Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Dwie petle for
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam,


Chyba dopada mnie jakis analfabetyzm wtorny.....


Napisalem cos co mialo mi wytlumaczyc dzialanie petli for i napisalem z palca ale nie wiem dlaczego jest blad :

  1. <?php
  2.  
  3.    $tab1 = array("pawel", "marcin", "michal", "zenek");
  4.    $tab2 = array("zyzia", "dyzia", "fryzia", "cizia");
  5.    
  6.    $n = 3;
  7.    $m = 4;
  8.    
  9.    for($e=0; $e<$n; e++) {
  10.        for($h=0; $h<$m; h++) {
  11.            echo $tab1;
  12.        
  13.        echo $tab2;
  14.        }
  15.    }
  16. ?>



Błąd parsera w linii 9.......A poza tym nie wiem czy to wogole ma jakikolwiek sens taki przyklad ...?
zeten
  1. <?php
  2. for($e=0; $e<$n; e++) {
  3.       for($h=0; $h<$m; h++) {
  4. ?>


popraw na:

  1. <?php
  2. for($e=0; $e<$n; $e++) {
  3.       for($h=0; $h<$m; $h++) {
  4. ?>


Literówka winksmiley.jpg Nie wiem czy taki przykład ma sens ;-)

P.S.
W ogóle co ten skrypt ma robić? biggrin.gif Bo do mnie ten kod jest MEGA zagmatwany ;-)
Andaramuxo
Jeżeli chcesz zobaczyć jak działa pętla for do wykonaj taki skrypt:
  1. <?php
  2. for ($a=0; $a<=500; $a++) {
  3. echo " $a <br>";
  4. }
  5. ?>
JoShiMa
Poza tym echo nie wyświetli zawartości tablicy smile.gif
Wolfie
Jak dziala petla for wiem, ale nie wiem jak dziala podwojna petla for smile.gif

Co do wyswietlania echo to wyswietli, troche zmodyfikowalem przyklad :

  1. <?php
  2.  
  3.    $tab = array(array("pawel", "marcin", "michal", "zenek"),array("zyzia", "dyzia", "fryzia", "cizia"),array(1,2,3,4,5,));
  4.    
  5.    $n = 2;
  6.    $m = 1;
  7.    
  8.    for($e=0; $e<$n; $e++) {
  9.      for($h=0; $h<$m; $h++) {
  10.            
  11.        echo $tab[$e][$h];
  12.        }
  13.    }
  14. ?>


Tylko teraz mam jedna tablice , a chcialem zobaczyc jak np mozna dodawac wartosci tablic do siebie wykorzystujac 2 petle for, tak aby z 2 tablic jednowymiarowych otrzymac jedna dwuwumiarowa......
Fifi209
  1. <?php
  2. $tablica1 = array('a', 'b', 'c');
  3. $tablica2 = array('d', 'e', 'f');
  4. $nowa = array();
  5.  
  6. for ($i=0; $i < count($tablica1); $i++) {
  7. $nowa[] = array($tablica1[$i], $tablica2[$i]);
  8. }
  9.  
  10. echo '<pre>';
  11. print_r($nowa);
  12. echo '</pre>';
  13. ?>


O coś takiego chodzi?
JoShiMa
Może raczej:

  1. <?php
  2. for ($i=0; $i < count($tablica1); $i++) {
  3.   for ($j=0; $j < count($tablica2); $j++) {
  4.        $nowa[] = array($tablica1[$i], $tablica2[$j]);
  5.   }
  6. }
  7. ?>
Fifi209
Cytat(JoShiMa @ 4.08.2009, 09:34:41 ) *
Może raczej:

  1. <?php
  2. for ($i=0; $i < count($tablica1); $i++) {
  3.   for ($j=0; $j < count($tablica2); $j++) {
  4.        $nowa[] = array($tablica1[$i], $tablica2[$j]);
  5.   }
  6. }
  7. ?>


W ten sposób połączysz "każdy z każdym" winksmiley.jpg
JoShiMa
Owszem, ale autor nie powiedział jak chce połączyć smile.gif A tak to przynajmniej wykorzystam wszystkie elementy każdej tablicy smile.gif Twój sposób wywali błąd, Jeśli druga tablica będzie miała mniej elementów niż pierwsza.
Fifi209
Cytat(JoShiMa @ 4.08.2009, 10:48:59 ) *
Owszem, ale autor nie powiedział jak chce połączyć smile.gif A tak to przynajmniej wykorzystam wszystkie elementy każdej tablicy smile.gif Twój sposób wywali błąd, Jeśli druga tablica będzie miała mniej elementów niż pierwsza.


Bo z założenia obie są równe sobie długością.

ew. można dodać:

  1. <?php
  2. if (count($tablica1) == count($tablica2)) {
  3. // tutaj pętla
  4. }else{
  5. // błąd
  6. }
  7. ?>
JoShiMa
Niech autor wątku sam zdecyduje o co mu chodziło. Przecież nie będziemy się domyślać a w takiej sytuacji spór jest bezcelowy smile.gif

Dodam tylko, że Twoją ostatnią podpowiedź można napisać zgrabniej

  1. <?php
  2. $limit = min(count($tablica1),count($tablica2));
  3.   for ($i=0; $i < $limit; $i++) {
  4.      $nowa[] = array($tablica1[$i], $tablica2[$i]);
  5. }
  6. ?>


wtedy błąd nie wystąpi smile.gif
Wolfie
Coz, głównie chodzi mi o zapoznanie sie z mozliwosciami tablic i jak sa zbudowane , przy okazji budowa petli for smile.gif przy dwuwymiarowych tablicach.

Interesuje mnie glownie jak stworzyc tablice dwuwymiarowa tak zebym mogl np wyswietlic tez dowolny elemetn z dowolnego rzedu i dowolnej kolumny. Taka macierz bede chcial pozniej wykorzystac ale najpierw chce zrozumiec dobrze jej dzialanie i dostawanie sie do elementow smile.gif, i czy wogole to ma sens, moze lepiej skorzystac poprostu z bazy danych ? winksmiley.jpg

No a przeciez bez podwojnej petli for nie bede mogl sobie wybrac dowolnego elemetnu tablicy.

Co do dodawania do siebie tablic to chce wiedziec jakie sa mozliwosci, w jaki sposob mozna je do siebie dodawac....majac tablice jednowymiarowa wiadomo ze mamy tylko jeden rzad i wiele kolumn, w przypadku dwuwymiarowej wiele rzedow o wiele kolumn, czy tak ?

A na koncu najlepiej jakby udalo mi sie zrobic to tak zeby wszyskto wyswietlalo sie pozniej tak, jak wygladalaby ta tablica, bo jak ostatnio wyswietlalem to wszystko bylo w jednym rzedzie na monitorze ale to juz rozumiem rola html.....?
JoShiMa
Podwójna pętla służy do przeczesania dwuwymiarowej tablicy i przeszukania jej wszystkich elementów. Żeby pobrać jeden, wybrany element, wystarczy podać jego "współrzędne". smile.gif
Wolfie
A czy w przypadku dodawania do siebie np dwoch tablic dwuwymiarowych obowiazuja takie same zasady ja przy dzialaniach na miacierzach ?
JoShiMa
Co do ilości i rzędów. PHP jest pod tym względem bardzo liberalne. Oczywiście można stworzyć i używać tablicę zbudowaną jak macierz (wiele rzędów i w każdym rzędzie tyle samo kolumn). Jednak im szybciej przestaniesz w ten sposób postrzegać tablice Tym lepiej dla Ciebie, bo taka budowa tablicy nie jest obowiązkowa. Lepiej myśl o tym jak o zagnieżdżeniu tablic. Na przykład pierwszy element tablicy jest tablicą n-elementową, drugi element może być tablicą m-elementową, trzeci element tablicy może być liczbą a czwarty obiektem. Nie myśl o tablicy jak o macierzy ale jak o pewnej strukturze.

Wspomniałeś coś o bazach danych. Nawet jak się zdecydujesz (wszystko zależy czego oczekujesz) to bez zrozumienia i czucia tablic będzie Ci ciężko smile.gif

W PHP nie istnieją żadne zasady jeśli chodzi o tablice. Ty decydujesz o ich strukturze smile.gif Nawet indeksy nie muszą być kolejnymi liczbami całkowitymi (tablice asocjacyjne).
Wolfie
Czyli w tablicach asocjacyjnych moge rownoez przechowywac obietky i nadawacc kluczom do obiektow dowolna nazwe ?

No i czym lepiej przegladac tablice ? for czy foreach ?
JoShiMa
Możesz przechowywać wszystko dosłownie. A co do kluczy to jedyne ograniczenie formalne jest takie, że można używać tylko liter i podkreślników ale bez polskich znaków i spacji. Dokładnie tak jak z nazwami zmiennych.

Co do for i foreach, to wszystko zależy co chcesz osiągnąć i jaką masz tablicę. Jeśli indeksy nie są kolejnymi liczbami całkowitymi to for odpada smile.gif
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.