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:
function thousands($num)
{
  $ret = "";

  for($i=0;$i<strlen($num);$i++)
    $ret .= ($i%3 ? "$num[$i] " : "$num[$i]");

  return $ret;
}
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
function thousands($num)    
{    
	$ret = "";    
	$c = 1;
	for($i=strlen($num)-1;$i>=0;$i--)   
	{
		$ret .= ($c%3 ? "$num[$i]" : "$num[$i] ");
		$c++;
	}
	return strrev($ret);    
} 
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
function thousands($num,$format=", ")    
{
	$num = "$num";
	$ret = "";   
	$nlen = strlen($num);
	$format = strrev($format);
	$c = 1;
	for($i=$nlen-1;$i>=0;$i--)   
	{
		$ret .= ($c%3 ? "$num[$i]" : "$num[$i]".($c==$nlen ? "":$format));
		$c++;
	}
	return strrev($ret);    
} 
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. :)

function thousands($num, $format=', ')
  {
    return trim(strrev(chunk_split(strrev($num),3,strrev($format))),$format);
  }