Показать 1к вместо 1000 - PullRequest
       24

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

7 голосов
/ 18 декабря 2011
    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;
    }
}

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

Ответы [ 5 ]

8 голосов
/ 18 декабря 2011

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

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() неправильно.

7 голосов
/ 18 декабря 2011

Вот общий способ сделать это, который не требует использования 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];
}

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

4 голосов
/ 18 декабря 2011

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

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

Дайте мне знать, если я пропустил любое из ваших требований:1005 *

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;
}
1 голос
/ 19 сентября 2018

Или вы тоже можете использовать библиотеку Как это работает здесь

Просто установите composer require stillat/numeral.php и

<?php
require_once __DIR__.'/vendor/autoload.php';

$formatter = new Stillat\Numeral\Numeral;
$formatter->setLanguageManager(new Stillat\Numeral\Languages\LanguageManager);

$formatter->format(1532, '0a,0'); //Affiche 1.5K
1 голос
/ 22 мая 2012

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

Просто улучшаем ответ @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);
...