Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] jak zmienić formę wyświetlania stringu
Forum PHP.pl > Forum > Przedszkole
cobol
mam stringi np:
  1. <?php
  2. $a = "9";
  3. $b = "1235";
  4. $c = "123";
  5. $d= "12";
  6. ?>

i jak je przekształcić, aby było zachowane formatowanie xx:xx
np:
  1. <?php
  2. $a = "00:09";
  3. $b = "12:35";
  4. $c = "01:23";
  5. $d= "00:12";
  6. ?>

?
bim2
  1. <?php
  2. $tmp = floor($a/60);
  3. $hour = $tmp;
  4. $minutes = $a-($tmp*60);
  5. if(strlen($hour)==1)
  6. {
  7.  $hour = '0'.$hour;
  8. }
  9. if(strlen($minutes)==1)
  10. {
  11.  $minutes = '0'.$minutes;
  12. }
  13.  
  14. echo $hour.':'.$minutes;
  15. ?>
cobol
dziękuję bim2


// $pomógł++; winksmiley.jpg
// ~ayeo
cobol
ale przez to zaokrąglenie źle pokazuje sad.gif
bim2
jak źle pokazuje? :]
cobol
np dla $a = "123";
pokazuje 02:03 zamiast 01:23
ayeo
Witam!

123 sekundy to chyba 2 minuty i 3 sekundy? Czyli pokazuje dobrze winksmiley.jpg
Jak chcesz dodać po prostu dwukropek co dwie cyfry to RTFM

Pozdrawiam!
bim2
o boze ... Było mówić, że 123 to nie są minuty. (W sumie moja wina że nie spostrzegłem haha.gif)
  1. <?php
  2. $len = strlen($a);
  3. $new = '';
  4. for($i=0;$i<$len;$i++)
  5. {
  6. $new .= $a{$i};
  7. if($i==1)
  8. {
  9. $new .= ':';
  10. }
  11. }
  12. echo $new;
  13. ?>
cobol
teraz jest ok dla czterocyfrowych stringów, ale jeśli
  1. <?php
  2. $a = "3";
  3. $b = "33";
  4. $c = "133";
  5. ?>

to już nie jest ok ;(
powinno uzupełniać zerami do 4 cyfr od początku i wtedy po 2 cyfrze dodać dwukropek.
efekt końcowy:
  1. <?php
  2. $a = "00:03";
  3. $b = "00:33";
  4. $c = "01:33";
  5. ?>


ps wole cobol i jcl , w php się gubię winksmiley.jpg
bim2
  1. <?php
  2. $a = '133';
  3. if(strlen($a)<2)
  4. {
  5.    $a = '00:0'.$a;
  6. }
  7. elseif(strlen($a)<3)
  8. {
  9.    $a = '00:'.$a;
  10. }
  11. elseif(strlen($a)<4)
  12. {
  13.    $a = '0'.$a{0}.':'.$a{1}.$a{2};
  14. }
  15. elseif(strlen($a)<5)
  16. {
  17.    $a = $a{0}.$a{1}.':'.$a{2}.$a{3};
  18. }
  19.  
  20. echo $a;
  21. ?>

Sam sprawdziłem. Już działa.
ayeo
  1. <?php
  2. $string = "123";
  3. $pattern = "#([0-9]{2})$#";
  4. $string = preg_replace($pattern, ":$1", $string);
  5. echo $string;
  6. ?>


Pozdrawiam!
bim2
~ayeo może i prościej, ale dłużej działa smile.gif
cobol
Cytat(bim2 @ 15.11.2008, 16:39:19 ) *
Sam sprawdziłem. Już działa.

teraz jest super winksmiley.jpg

$dzięki++;
ayeo
@bim2, hehe. Najpardziej przekombinowane rozwiązanie banalnego problemu:
  1. <?php
  2. $string = "123";
  3. $pattern = "#([0-9]{2})$#";
  4.  
  5. if(preg_match($pattern, $string))
  6. {
  7.    $string = preg_replace($pattern, ":$1", $string);
  8. }
  9. else
  10. {
  11.    $string = strlen($string) == 1 ? "0".$string : $string;
  12.    $string = "00:".$string;
  13. }
  14. echo $string;
  15. ?>


Pozdrawiam!
bim2
Wiesz co, nie zgodzę się. smile.gif Mój sposób działa najszybciej smile.gif Moim zdaniem twoje jest przekombinowane. Po co używać dla max 4 literowego stringa wyrażeń regularnych.
erix
(nie) Macie obaj racji. tongue.gif

~ayeo by wciskał pregi, gdzie tylko się da, za to Ty robisz kilka razy strlen" title="Zobacz w manualu PHP" target="_manual. tongue.gif
bim2
Czepialski biggrin.gif:D

  1. <?php
  2. $a = '133';
  3. $len = strlen($a);
  4. if($len<2)
  5. {
  6.   $a = '00:0'.$a;
  7. }
  8. elseif($len<3)
  9. {
  10.   $a = '00:'.$a;
  11. }
  12. elseif($len<4)
  13. {
  14.   $a = '0'.$a{0}.':'.$a{1}.$a{2};
  15. }
  16. elseif($len<5)
  17. {
  18.   $a = $a{0}.$a{1}.':'.$a{2}.$a{3};
  19. }
  20.  
  21. echo $a;
  22. ?>
ayeo
@bim2 - przekombinowane napisałem o swoim kodzie winksmiley.jpg

  1. <?php
  2. $string = "253";
  3. while( strlen( $string ) < 4) $string = "0".$string;
  4. $string = preg_replace("#([0-9]{2})$#", ":$1",  $string );
  5. echo $string;
  6. ?>


Da rade lepiej?
erix
Cytat
Czepialski biggrin.gif

Skoro mówiliśmy o szybkości działania, to trzeba było się czepić. tongue.gif

Kod
0.042402982711792
0.23657393455505


Tysiąc iteracji, kod ~bim2 jest szybszy. tongue.gif
melkorm
  1. <?php
  2. $a = 123;
  3. $temp = sprintf("%04d",$a);
  4. echo substr($temp,0,2).' : '.substr($temp,2,4);
  5. ?>

jakoś tak .... naturalniej ;]

albo :

  1. <?php
  2. $temp = sprintf("%04d",$a);
  3. echo $temp[0].$temp[1].' : '.$temp[2].$temp[3];
  4. ?>

tongue.gif
ayeo
No niby tak, ale zakładasz, że znasz długość stringa...

  1. <?php
  2. $string = "253";
  3. while( strlen( $string ) < 4) $string = "0".$string;
  4.  
  5. $no = strlen($string) - 2;
  6. $tmp = $string[$no];
  7. $string[$no] = ":";
  8. $string = str_replace(":", ":$tmp", $string);
  9.  
  10. echo $string;
  11. ?>


Ja mam teraz takiego potworka :/
melkorm
Cytat
No niby tak, ale zakładasz, że znasz długość stringa...


Cytat
i jak je przekształcić, aby było zachowane formatowanie xx:xx


napisane że 4. Mój skrypt zadziała dla wszytskiego od 0 do 4 znaków 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.