Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Rozdzielanie wyrażeń
Szymciosek
post
Post #1





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Witam,
czytam właśnie książeczkę, a tam takie coś:

  1. for ($i = 0, $j = 100; $i < 100, $j > 0; $i++, $j--)
  2. {
  3. echo $i . '<br />';
  4. echo $j . '<br />';
  5. }


Chodzi o składnię pętli for.
Gdzie to mogę wykorzystać w praktyce?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
lobopol
post
Post #2





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Tam gdzie potrzebujesz chyba logiczne.


--------------------
Go to the top of the page
+Quote Post
Szymciosek
post
Post #3





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


No naprawdę? To ja akurat wiem, ale może jakiś przykład wykorzystania tego?
Go to the top of the page
+Quote Post
sowiq
post
Post #4





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Najprostszy przypadek - chcesz narysować wszystkie kombinacje prostokątów o długościach boków w przedziale 1 - 100px.

Mnie zastanawia coś innego. Jeszcze nigdy nie spotkałem się z łączeniem warunków przez przecinek: $i < 100, $j > 0. IMO lepiej (czytelniej) byłoby zapisać go w ten sposób: $i < 100 && $j > 0.

Ten post edytował sowiq 24.04.2013, 16:22:26
Go to the top of the page
+Quote Post
Szymciosek
post
Post #5





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


W sumie chyba kwestia programisty, ale racja, wychodzi na to samo jeśli chodzi o środkową część składni (warunki).
Go to the top of the page
+Quote Post
PrinceOfPersia
post
Post #6





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


hmm... odpaliłem to i wychodzi jednak inaczej, w zależności czy da się && czy ,

Wychodzi na to, że tak jak w niektórych innych językach (chociażby w C czy JavaScript) ewaluowana jest wtedy ostatnia wartość po przecinku (w zasadzie ewaluowane są wszystkie, tylko ostatnia się liczy), czyli że ostatnie wyrażenie $j > 0 unieważnia wszystkie inne.
wg manuala:
Cytat
Each of the expressions can be empty or contain multiple expressions separated by commas. In expr2, all expressions separated by a comma are evaluated but the result is taken from the last part.

http://www.php.net/manual/en/control-structures.for.php

I faktycznie - wywalam $i < 100, zostawiam samo $j > 0 i na to samo wychodzi. Tak jakby tego pierwszego warunku nie było:
  1. for ($i = 0, $j = 100; /*$i < 100, */ $j > 0; $i++, $j--)


Ten post edytował PrinceOfPersia 24.04.2013, 21:50:37


--------------------
Go to the top of the page
+Quote Post
Szymciosek
post
Post #7





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


No masz rację, tak jakby pierwszy z warunków nie był brany pod uwagę:

  1. for ($i = 0, $j = 10; $i < 3, $j > -10; $i++, $j--)
  2. {
  3. echo $i . ' -> I <br />';
  4. echo $j . ' -> J <br />';
  5. }


Kod
0 -> I
10 -> J
1 -> I
9 -> J
2 -> I
8 -> J
3 -> I
7 -> J
4 -> I
6 -> J
5 -> I
5 -> J
6 -> I
4 -> J
7 -> I
3 -> J
8 -> I
2 -> J
9 -> I
1 -> J
10 -> I
0 -> J
11 -> I
-1 -> J
12 -> I
-2 -> J
13 -> I
-3 -> J
14 -> I
-4 -> J
15 -> I
-5 -> J
16 -> I
-6 -> J
17 -> I
-7 -> J
18 -> I
-8 -> J
19 -> I
-9 -> J


Wychodzi na to, że skrypt się wykonuje dopóki nie zostanie spełniony drugi warunek.

Ten post edytował Szymciosek 24.04.2013, 21:56:41
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 Aktualny czas: 19.08.2025 - 16:09