Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]pętla for i przedział
Forum PHP.pl > Forum > Przedszkole
piotr485
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
MateuszS
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. ?>
phpion
@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 />';
piotr485
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 ?

thek
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.
cojack
  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
piotr485
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
cojack
  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);
thek
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';
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.