2011-12-18 9 views
7
function restyle_text($input){ 
    $input = number_format($input); 
    $input_count = substr_count($input, ','); 
    if($input_count != '0'){ 
     if($input_count == '1'){ 
      return substr($input, +4).'k'; 
     } else if($input_count == '2'){ 
      return substr($input, +8).'mil'; 
     } else if($input_count == '3'){ 
      return substr($input, +12).'bil'; 
     } else { 
      return; 
     } 
    } else { 
     return $input; 
    } 
} 

Este es el código que tengo, pensé que estaba funcionando. aparentemente no ... alguien puede ayudar ya que no puedo resolver esto.Mostrar 1k en lugar de 1,000

+1

¿Qué recibió al ejecutar este código? ¿Recibió algún error? Si es así, ¿cuál? – Lion

+1

¿Qué está haciendo que "no funciona"? –

+0

posible duplicado de [Acortar números largos a K/M/B?] (Http://stackoverflow.com/questions/4371059/shorten-long-numbers-to-kmb) –

Respuesta

8

Prueba esto:

http://codepad.viper-7.com/jfa3uK

function restyle_text($input){ 
    $input = number_format($input); 
    $input_count = substr_count($input, ','); 
    if($input_count != '0'){ 
     if($input_count == '1'){ 
      return substr($input, 0, -4).'k'; 
     } else if($input_count == '2'){ 
      return substr($input, 0, -8).'mil'; 
     } else if($input_count == '3'){ 
      return substr($input, 0, -12).'bil'; 
     } else { 
      return; 
     } 
    } else { 
     return $input; 
    } 
} 

Básicamente, creo que está utilizando el substr() mal.

3

Reescribí la función para usar las propiedades de los números en lugar de jugar con cadenas.

Eso debería ser más rápido.

Quiero saber si me perdí ninguna de sus requisitos:

function restyle_text($input){ 
    $k = pow(10,3); 
    $mil = pow(10,6); 
    $bil = pow(10,9); 

    if ($input >= $bil) 
     return (int) ($input/$bil).'bil'; 
    else if ($input >= $mil) 
     return (int) ($input/$mil).'mil'; 
    else if ($input >= $k) 
     return (int) ($input/$k).'k'; 
    else 
     return (int) $input; 
} 
6

Aquí está una manera genérica para hacer esto que no requieren el uso de number_format o hacer cuerdas de análisis:

function formatWithSuffix($input) 
{ 
    $suffixes = array('', 'k', 'm', 'g', 't'); 
    $suffixIndex = 0; 

    while(abs($input) >= 1000 && $suffixIndex < sizeof($suffixes)) 
    { 
     $suffixIndex++; 
     $input /= 1000; 
    } 

    return (
     $input > 0 
      // precision of 3 decimal places 
      ? floor($input * 1000)/1000 
      : ceil($input * 1000)/1000 
     ) 
     . $suffixes[$suffixIndex]; 
} 

Y here's a demo showing it working correctly para varios casos.

+0

Muchas gracias compañero, funciona como un encanto –

1

No quiero estropear el momento ... pero creo que esto es un poco más simplificado.

Justo mejorar @Indranil respuesta

por ejemplo,

function comp_numb($input){ 
    $input = number_format($input); 
    $input_count = substr_count($input, ','); 
    $arr = array(1=>'K','M','B','T'); 
    if(isset($arr[(int)$input_count]))  
     return substr($input,0,(-1*$input_count)*4).$arr[(int)$input_count]; 
    else return $input; 

} 

echo comp_numb(1000); 
echo '<br />'; 
echo comp_numb(1000000); 
echo '<br />'; 
echo comp_numb(1000000000); 
echo '<br />'; 
echo comp_numb(1000000000000); 
+0

Esto ignora el decimal - ejemplo: 1250 –

+0

Lo mismo ocurre con la otra respuesta. =) –

Cuestiones relacionadas