Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tablice dwuwymiarowe
Forum PHP.pl > Forum > Przedszkole
f#a#oo
Witam wszystkich pierwszym postem. Właśnie raczkuję z php, przerabiam sobie pewien podręcznik i wiedzę uzupełniam manualem, ale… nie mogę zrozumieć, dlaczego poniższy kod z podręcznika działa. Siedzę nad tym już kilkadziesiąt minut.

Przykład 1 (podręcznik).

  1. $produkty = array (array('OPO', 'Opony', 100),
  2. array('OLE', 'Olej', 10),
  3. array('SWI', 'Swiece Zaplonowe', 4));
  4.  
  5.  
  6.  
  7. for($rzad = 0; $rzad < 3; $rzad++) {
  8. while (list($klucz, $wartosc) = each($produkty[$rzad])) {
  9. echo "| $wartosc ";
  10. }
  11. echo ' |</br>';
  12. }



Chodzi mi głównie o działanie list() i each() w tabelach dwuwymiarowych.
Dlaczego po wpisaniu echo "| $wartosc "; wyświetla się cały rząd, tzn. zawartość tablicy drugiego stopnia?


W manualu (http://pl.php.net/manual/pl/function.each.php) jest:

Przykład 2.

  1. $owoce = array('a' => 'jabłko', 'b' => 'banan', 'c' => 'truskawka');
  2. reset ($owoce);
  3. while (list ($klucz, $wartosc) = each ($owoce)) {
  4. echo "$klucz => $wartosc\n";


Zawartość tablicy jest wywoływana przy pomocy dwóch zmiennych, każda po imieniu.
W wypadku tablicy dwuwymiarowej z przykładu 1 wystarczy tylko $wartosc? Po co definiowano $klucz skoro nie ma do niego odwołania? W przykładzie 1 list() wyświetla wszystko automatycznie, a w przykladzie 2 trzeba to dokładnie określać? Dlaczego?

Będę wdzięczny za pomoc.
Fifi209
Teraz zamiast each i list używa się pętli foreach
zordon
poczytaj dokładnie w manualu o list() i each().
W pierwszym przykładzie w każdej iteracji each() zwraca tablicę w stylu:
[1] => 'OPO'
[value] => 'OPO'
[0] => 0
[key] => 0
po czym przesuwa wskaźnik tablicy na nastepny element.

list() zapisuje do zmiennych wartości tablicy o kluczach numerycznych. Możesz nie chcieć otrzymać "późniejszych" elementów, ale ich kolejność ma znaczenie więc aby dobrać się do "późniejszych" musisz najpierw przypisać do czegoś "wcześniejsze" lub zaznaczyć, że tam są zostawiając puste miejsce i przecinek. Pierwszy przykład powinien działać również w postaci:

  1. $produkty = array (array('OPO', 'Opony', 100),
  2. array('OLE', 'Olej', 10),
  3. array('SWI', 'Swiece Zaplonowe', 4));
  4.  
  5.  
  6.  
  7. for($rzad = 0; $rzad < 3; $rzad++) {
  8. while (list(, $wartosc) = each($produkty[$rzad])) {
  9. echo "| $wartosc ";
  10. }
  11. echo ' |</br>';
  12. }



f#a#oo
@@Fifi209

Bardzo możliwe, ale teraz poznaję zasady działania poszczególnych elementów języka.


@zordon

Czytałem manuala, ale nie do końca to wszystko jeszcze układa mi się w całość. Faktycznie, jeśli chcę mogę wywołać tylko jedną zmienną przekazująca dane z tablicy. To rozumiem. Wobec tego $wartosc przechwytuje z tablicy wewnętrznej 'OLE', 'Olej', 10? A co przechowuje $klucz? Odnosi się do tablicy nadrzędnej, numeruje tablice wewnętrzne?


Może to są dziecinne pytania, ale staram się to zrozumieć, a samemu nie idzie.
nekomata
W przyklejonym topic'u , jest bardzo dokładnie napisane jak wyświetlić array czyli
  1. echo '<pre>';
  2. print_r($array);
  3. echo '</pre>';

Przyjrzyj się dokładnie temu co Ci się wyświetli , może wtedy zrozumiesz co to klucz a co to wartość .
Poza tym źle te tablice montujesz (założenie masz dobre ale źle to rozpisałeś)
  1. $data = array(
  2. 'OPO'=>array('Opony',100),
  3. 'OLE'=>array('Olej', 10),
  4. 'SWI'=>array('Swiece Zaplonowe', 4)
  5. );
Czli w powyższym przypadku OPO , OLE , SWI to jest KLUCZ a array z oponami , olejem i świecami to jest wartość . Ogólnie to poczytać manual'a musisz array.
f#a#oo
@nekromanta

Teraz rozumiem smile.gif Podany przez Ciebie wydaje się bardziej logiczny. Już rozróżniam klucz i wartość wink.gif

Zastosowany przeze mnie sposób montowania jest w "PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty". Może to ze względu na początek książki (koło setnej strony), a może jest stara/z błędami...

Pozdrawiam i dziękuję za pomoc autorom postów.

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.