ugrás a tartalomhoz

Számok tördelése

sandrosdj · 2012. Nov. 3. (Szo), 14.50
Üdv! Ezres tördelést szeretnék készíteni számokra. A probléma az, hogy hátulról elindulva kellene vizsgálni a számokat, de ez eddig nem jött össze. A jelenlegi kódom:
  1. function thousands($num)  
  2. {  
  3.   $ret = "";  
  4.   
  5.   for($i=0;$i<strlen($num);$i++)  
  6.     $ret .= ($i%3 ? "$num[$i] " : "$num[$i]");  
  7.   
  8.   return $ret;  
  9. }  
Ezt meg lehetne csinálni úgy, hogy visszafelé vizsgálja a stringet és aztán megfordítom azt, de ennél csak létezik "elegánsabb" megoldás is. Mit gondoltok, hogyan lehetne még megcsinálni?
 
1

Amennyiben nem házi feladat,

kuka · 2012. Nov. 3. (Szo), 15.03
Amennyiben nem házi feladat, én inkább a number_format() függvényt használnám.
3

Élesben én is ezt használom,

sandrosdj · 2012. Nov. 3. (Szo), 15.18
Élesben én is ezt használom, de szeretnék magamtól is írni egy egyszerűt.
2

hátulról

Poetro · 2012. Nov. 3. (Szo), 15.11
Ha hátulról akarod kezdeni, akkor miért kezded előröl? Azaz 0 helyett a string hossza - 1-nél kellene kezdened a ciklust, és onnan menni 0-ig.
4

Visszafelé

sandrosdj · 2012. Nov. 3. (Szo), 15.35
  1. function thousands($num)      
  2. {      
  3.     $ret = "";      
  4.     $c = 1;  
  5.     for($i=strlen($num)-1;$i>=0;$i--)     
  6.     {  
  7.         $ret .= ($c%3 ? "$num[$i]" : "$num[$i] ");  
  8.         $c++;  
  9.     }  
  10.     return strrev($ret);      
  11. }   
nem ad vissza semmit.

Helyesbítek: működik, ha idéző jelek közé teszem a számot:
thousands("123456").
6

String

Poetro · 2012. Nov. 3. (Szo), 16.04
Miért, mire gondoltál, ha string műveleteket használsz, akkor azok miért működnének ugyanúgy számokra? Ha számokkal akarsz dolgozni, akkor a nekik megfelelő műveleteket végezz. Azaz összeadást, kivonást, szorzást, osztást. Azokkal is meg lehet oldani ugyanis.
5

És kész :)

sandrosdj · 2012. Nov. 3. (Szo), 15.42
  1. function thousands($num,$format=", ")      
  2. {  
  3.     $num = "$num";  
  4.     $ret = "";     
  5.     $nlen = strlen($num);  
  6.     $format = strrev($format);  
  7.     $c = 1;  
  8.     for($i=$nlen-1;$i>=0;$i--)     
  9.     {  
  10.         $ret .= ($c%3 ? "$num[$i]" : "$num[$i]".($c==$nlen ? "":$format));  
  11.         $c++;  
  12.     }  
  13.     return strrev($ret);      
  14. }   
7

Ha csak egész számok...

csla · 2012. Nov. 3. (Szo), 22.56
... akkor a poén kedvéért lehet ciklus nélkül is, egy menetben. :)
  1. function thousands($num$format=', ')  
  2.   {  
  3.     return trim(strrev(chunk_split(strrev($num),3,strrev($format))),$format);  
  4.   }