Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Foreach as
PiiiTeeeR
post 12.11.2015, 20:31:13
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 16.07.2014

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
vokiel
post 12.11.2015, 21:52:51
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


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


--------------------
Go to the top of the page
+Quote Post
nospor
post 13.11.2015, 10:09:13
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 :/


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
vokiel
post 13.11.2015, 21:20:08
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


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


--------------------
Go to the top of the page
+Quote Post
nospor
post 14.11.2015, 21:02:17
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No i teraz jest ok smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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: 14.08.2025 - 13:56