Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Tablice dwuwymiarowe, czyli skrótowe odwoływanie się do list() i each()
f#a#oo
post 9.06.2011, 09:11:51
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 9.06.2011

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


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.
Go to the top of the page
+Quote Post
Fifi209
post 9.06.2011, 09:53:34
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Teraz zamiast each i list używa się pętli foreach


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
zordon
post 9.06.2011, 10:03:38
Post #3





Grupa: Zarejestrowani
Postów: 358
Pomógł: 78
Dołączył: 4.11.2008
Skąd: Kraków

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


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



Go to the top of the page
+Quote Post
f#a#oo
post 9.06.2011, 11:43:12
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 9.06.2011

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


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

Ten post edytował f#a#oo 9.06.2011, 12:08:01
Go to the top of the page
+Quote Post
nekomata
post 9.06.2011, 16:45:11
Post #5





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


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.
Go to the top of the page
+Quote Post
f#a#oo
post 9.06.2011, 21:23:26
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 9.06.2011

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


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

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.06.2025 - 00:06