Показывать 1к вместо 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;
    }
}

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


person Jake    schedule 18.12.2011    source источник
comment
Что вы получили, когда запустили этот код? Вы получили какие-либо ошибки? Если да, то какие?   -  person Lion    schedule 18.12.2011
comment
Что он делает, что не работает?   -  person Jared Farrish    schedule 18.12.2011
comment
возможный дубликат Сократить длинные числа до K/M/B?   -  person Merlyn Morgan-Graham    schedule 18.12.2011


Ответы (5)


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

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

person Indranil    schedule 18.12.2011
comment
Ваша ссылка не работает. Я знаю, что этот пост слишком старый. - person user9437856; 24.05.2020
comment
он показывает прямое значение, если у нас есть 1200, он должен показывать 1,2 КБ, но этот код показывает 1 КБ - person rahul sharma; 27.02.2021

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

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

person Merlyn Morgan-Graham    schedule 18.12.2011

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

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

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

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;
}
person Dimme    schedule 18.12.2011

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

Просто улучшаю ответ @Indranil

e.g.

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);
person Val    schedule 22.05.2012
comment
Это игнорирует десятичное число - пример: 1250 - person Sagive SEO; 12.02.2014
comment
Как и другой ответ. знак равно - person Henrik Petterson; 05.03.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
person Goms    schedule 19.09.2018