Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Foreach as
Forum PHP.pl > Forum > Przedszkole
PiiiTeeeR
Hej, nie za bardzo się orientuje w php i ćwiczę sobie przelatywanie po tablicach. Mam takie pytanie:

Posiadam tablicę

  1.  
  2.  
  3. [Zabawki] => Array
  4. (
  5. [0] => Array
  6. (
  7. [zabawki] => 'auto'
  8. [cena] => 50
  9.  
  10. )
  11. [1] => Array
  12. (
  13. [zabawki] => 'rower'
  14. [cena] => 100
  15.  
  16. )


Chciałem zrobić zwykłego foreach'a, który by przelatywał po $this->Zabawki ale przeczytałem że jak tablice są złożone z wielu tablic to trzeba stosować 'as' $x=> $y

Nie wiem za bardzo jak napisać if'a w srodku który porówna mi string'a (przykładowo auto)

  1. i=0;
  2. foreach ($this->Zabawki as $x => $y) {
  3.  
  4. [b]if($x[$i] == 'auto'){
  5. [/b]
  6. //działanie programu
  7. i++;
  8. }


To, co pogrubiłem nie działa, nie wiem jak to skonstruować

Dzięki za pomoc z góry smile.gif
vokiel
Poczytaj o różnicach między funkcjami foreach a for, to nawet nie ma do końca związku z PHP bo w innych językach działa podobnie.

W Twoim przykładzie:
  1. $zabawki = array(
  2. 'zabawki' => 'auto',
  3. 'cena' => 50
  4. ),
  5. 'zabawki' => 'rower',
  6. 'cena' => 100
  7. ),
  8. );


Foreach:
  1. foreach($zabawki as $zabawka){
  2. if ( $zabawka['zabawki'] == 'auto' ){
  3. echo 'Znalazłem auto, jego cena to: '.$zabawka['cena'].PHP_EOL;
  4. }
  5. }


For
  1. for ($i=0; $i<count($zabawki); $i++){
  2. $zabawka = $zabawki[$i];
  3. if ( $zabawka['zabawki'] == 'auto' ){
  4. echo 'Znalazłem auto, jego cena to: '.$zabawka['cena'].PHP_EOL;
  5. }
  6. }
nospor
Cytat
$i<count($zabawki)
vokiel no miejze litosc.... nie ucz poczatkujacego zlych nawykow. A potem powie jeden z drugim ze nauczono go tego na forum.php.pl :/
vokiel
Cytat(nospor @ 13.11.2015, 10:09:13 ) *
vokiel no miejze litosc.... nie ucz poczatkujacego zlych nawykow. A potem powie jeden z drugim ze nauczono go tego na forum.php.pl :/


Hehe, bez przesady, jeśli jest problem z listowaniem tablic, to nie ma co wprowadzać od razu lokalnego cache dla ilości elementów.

Poza tym jeśli już idziemy w mikro-optymalizacje to trzeba też zrobić pre-inkrementację zamiast post-, zamiast count() użyć sizeof() (8% szybsze), do tego print zamiast echo (zysk 4%) ;-)
(A i tak foreach() jest szybsze od for() jeśli robimy tylko odczyt)
  1. $count = sizeof($zabawki);
  2. for ($i = 0; $i < $count; ++$i) {
  3. // kod
  4. }
nospor
No i teraz jest ok 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.