Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]pętla for i przedział
piotr485
post 5.11.2009, 15:48:00
Post #1





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

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


Witam. Mam problem z pętlą for - w sumie, aż wstyd bo nie wiem jak napisać
takie liczby 0000, 0030, 0100, 0130, 0200, 0230
chciałbym tak wypisać aż do 2400 czy ktoś wie jak to zrobić

Jedynie mi się udało wypisac liczby od 0 do 2400

  1. for ($i = 0; $i <= 2400; $i++) {
  2. echo $i.'<br />';
  3. }


Jak to zrobic ? Prosze o podpowiedzi - trzeba wprowadzic dodatkowa zmienna ?

W manualu nic nieznalazlem
Go to the top of the page
+Quote Post
MateuszS
post 5.11.2009, 15:55:27
Post #2





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


A tak bedzie dobrze?

  1. <?
  2.  
  3. for($i=0000; $i<=2400; $i++) {
  4. if($i<10) {
  5. echo '000'.$i.'<br />';
  6. } elseif($i>=10 and $i<=99) {
  7. echo '00'.$i.'<br />';
  8. } elseif($i>=100 and $i<=999) {
  9. echo '0'.$i.'<br />';
  10. } else {
  11. echo $i.'<br />';
  12. }
  13. }
  14.  
  15. ?>


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
phpion
post 5.11.2009, 15:57:37
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@MateuszScierka:
Można dużo prościej i bardziej elegancko.

  1. echo sprintf('%04d', $i).'<br />';

lub
  1. echo str_pad((string)$i, 4, '0', STR_PAD_LEFT).'<br />';


Ten post edytował phpion 5.11.2009, 16:00:11
Go to the top of the page
+Quote Post
piotr485
post 5.11.2009, 16:23:53
Post #4





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

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


Tylko, że został jeszcze jeden problem - mianowicie teraz mi się wyświatlają liczby od 0000 do 2400, a jeszcze chodzi o to, aby wyświetlało się tylko tak jak napisałem czyli liczby z różnicą 30.
W ten sposób czyli:

0000
0030
0100
0130
0200
0230
0300
0330 ........................
2400

Do twojego kodu zamiast $i++ napisałem $i+=30 ale to i nie tak co chce uzyskac, ktos potrafi pomoc ?



Ten post edytował piotr485 5.11.2009, 16:26:13
Go to the top of the page
+Quote Post
thek
post 5.11.2009, 16:32:03
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zauważ, że tak naprawdę zmieniają Ci się 2 pierwsze cyfry w cyklach co 2.
Masz więc pętlę:
for($i=0; $i<24;$i++)
i wewnątrz nie w jednym przejściu pętli doklejasz raz '00', a raz '30' co daje ostatecznie:
  1. for($i=0; $i<24;$i++) {
  2. echo str_pad((string)$i, 2, '0', STR_PAD_LEFT).'00<br />';
  3. echo str_pad((string)$i, 2, '0', STR_PAD_LEFT).'30<br />';
  4. }

Zauważ też, że 0000 i 2400 to ta sama godzina, więc 2400 eliminuj smile.gif Ten pisany na kolanie skrypt tak robi.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
cojack
post 5.11.2009, 16:35:37
Post #6





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


  1. $a = 30;
  2.  
  3. for ($i = 0; $i < 2430; $i+=100)
  4. {
  5. if($i == 2400) {
  6. echo $i;
  7. } else {
  8. echo $i."\n";
  9. echo $i+$a."\n";
  10. }
  11. }


wynik:

Kod
[cojack-lap][~] $ php /srv/http/test.php
0                                      
30                                      
100                                    
130                                    
200                                    
230                                    
300                                    
330                                    
400                                    
430                                    
500
530
600
630
700
730
800
830
900
930
1000
1030
1100
1130
1200
1230
1300
1330
1400
1430
1500
1530
1600
1630
1700
1730
1800
1830
1900
1930
2000
2030
2100
2130
2200
2230
2300
2330
2400


Ten post edytował cojack 5.11.2009, 16:37:09


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
piotr485
post 5.11.2009, 16:43:19
Post #7





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

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


Fajnie, że mi pomagacie nie nadążam za odpowiedziami, zapomniałem jeszcze dodać, że tak jak wyświetlają się wyniki to w takiej kolejności potrzebuję mieć to w zmiennej tablicowej.

Właśnie przerabiałem skrypt od thek'a, aby jednak wyświetlało mi się 2400 bo w moim przypadku będzie potrzebne.

  1. for($i=0; $i<=24;$i++) {
  2. echo str_pad((string)$i, 2, '0', STR_PAD_LEFT).'00<br />';
  3. if ($i < 24) {
  4. echo str_pad((string)$i, 2, '0', STR_PAD_LEFT).'30<br />';
  5. }
  6. }


Ale nie wiem jak to przebic na tablice w takiej kolejnosci jak sie wyswietla. Zaraz sprobuje przejrzez przyklad cojack'a
Go to the top of the page
+Quote Post
cojack
post 5.11.2009, 16:47:12
Post #8





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


  1. $a = 30;
  2. $tab = array();
  3. for ($i = 0; $i < 2430; $i+=100)
  4. {
  5. if($i == 2400) {
  6. $tab[] = $i;
  7. } else {
  8. $tab[] = $i;
  9. $tab[] = $i+$a;
  10. }
  11. }
  12.  
  13. print_r($tab);


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
thek
post 5.11.2009, 18:13:05
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Myślę, że można ciut szybciej mój zrobić bez IF w każdej pętli. Zawsze to kilka cykli procka mniej winksmiley.jpg
  1. $tab = array();
  2. for($i=0; $i<24;$i++) {
  3. $tab[] = str_pad((string)$i, 2, '0', STR_PAD_LEFT).'00';
  4. $tab[] = str_pad((string)$i, 2, '0', STR_PAD_LEFT).'30';
  5. }
  6. $tab[] = '2400';

Masz od 0000 do 2400 smile.gif
Aby nieco skrócić ewentualny czas działania, by w każdej pętli nie liczyć dwukrotnie tego str_pad w locie...
  1. $tab = array();
  2. for($i=0; $i<24;$i++) {
  3. $temp = str_pad((string)$i, 2, '0', STR_PAD_LEFT);
  4. $tab[] = $temp.'00';
  5. $tab[] = $temp.'30';
  6. }
  7. $tab[] = '2400';


Ten post edytował thek 5.11.2009, 18:17:36


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
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: 24.04.2025 - 04:13