2011-12-18 25 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; 
    } 
} 

To jest kod, który mam, myślałem, że działa. najwyraźniej nie .. może ktoś pomóc, ponieważ nie mogę tego obliczyć.Pokaż 1k zamiast 1000

+1

Co otrzymałeś po uruchomieniu tego kodu? Czy pojawiły się jakieś błędy? Jeśli tak, to które? – Lion

+1

Co to znaczy "nie działa"? –

+0

możliwy duplikat [Skróć długie numery do K/M/B?] (Http://stackoverflow.com/questions/4371059/shorten-long-numbers-to-kmb) –

Odpowiedz

8

Spróbuj tego:

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; 
    } 
} 

Zasadniczo myślę, że używasz substr() źle.

3

Przepisałem funkcję, aby korzystać z właściwości liczb, zamiast grać za pomocą ciągów.

To powinno być szybsze.

Daj mi znać, jeśli brakowało mi wszelkie Państwa wymagania:

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

Oto rodzajowe sposobem na to, że nie wymaga użycia number_format czy ciąg parsowania zrobić:

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]; 
} 

I here's a demo showing it working correctly dla kilku przypadków.

+0

Wielkie dzięki, działa jak czar –

1

Nie chcę zepsuć tej chwili ... ale myślę, że jest to nieco bardziej uproszczone.

Wystarczy poprawy @Indranil odpowiedź

przykład

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

To ignoruje liczbę dziesiętną - przykład: 1250 –

+0

Podobnie jest z drugą odpowiedzią. =) –