Показать 1k вместо 1000

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

Это код, который у меня есть, я думал, что он работает. видимо, нет .. может кто-то помочь, так как я не могу понять это.

Related of "Показать 1k вместо 1000"

Попробуй это:

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

В принципе, я думаю, что вы используете substr() неправильно.

Вот общий способ сделать это, что не требует использования number_format или синтаксического анализа строк:

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

И вот демонстрация показывает, что она работает правильно для нескольких случаев.

Я повторно написал функцию, чтобы использовать свойства чисел, а не играть со строками.

Это должно быть быстрее.

Сообщите мне, если я пропустил любые ваши требования:

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

Я не хочу испортить момент … но я думаю, что это немного упрощено.

Просто улучшение @Indranil ответ

например

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