расставляй правильно приоритеты и не отвлекайся на мелочи

Переводим байты в человекочитаемый вид

Поводом для статьи послужила моя забывчивость, когда мне очень понадобилась давно написанная функция и я все никак не мог ее найти среди множества сайтов. Конечно я ее нашел, но времени ушло немало, для такой скромной функции, а посему я решил постить в этот блог свои подручные функции написанные на PHP, что-бы было одно место, где искать.

Функция переводит числовые значения в байтах в удобочитаемый вид. Вот примеры вывода:

bytes2readable(1000); // 0.98 КБ
bytes2readable(10000); // 9.77 КБ
bytes2readable(123456789); // 117.74 МБ
bytes2readable(109951162776); // 102.4 ГБ
bytes2readable(9000511627776); // 8.19 ТБ
bytes2readable(5000511627776954); // 4.44 ПБ

<?php
function bytes2readable($v$divisor 1024$l 0) {
    
$label = array(» КБ»» МБ»» ГБ»» ТБ»» ПБ»);
    
$precision 2;
    
    
$val $v $divisor;
    if (
floor($val) >= $divisor) {
        
$l++;
        
$val bytes2readable(floor($val), $divisor, &$l);
    }
    return 
round($val$precision).$label[$l]; 
}
?>

здесь:
$divisor — делитель (количество байт в Кбайте и т.д., по умолчанию 1024)
$label — массив названий градаций Ваших пороговых значений
$precision — точность округления после запятой

4 комментария на статью:
  1. Жилинский Владимир:

    Отлично !
    В блогролл ! =)

  2. bridennis:

    Пользуйтесь на здоровье :)

  3. Денис Радченко:

    Когда-то писал подобную функцию, конечно она не так элегантна как ваша.
    Но тогда в голову мне пришла мысль, что 988 байт лучше записывать как 988 байт, а не 0,96 КБ. В моей функции был порог 8 192 (8000 = 8 000 байт, 8 200 = 8,00 КБ и т.д.)

  4. bridennis:

    Мысль понятна, бывают и такие случаи. За элегантность спасибо.

Ответить
Обязательные поля помечены *