Skip to content

Instantly share code, notes, and snippets.

@mlconnor
Created September 2, 2011 19:29
Show Gist options
  • Save mlconnor/1189619 to your computer and use it in GitHub Desktop.
Save mlconnor/1189619 to your computer and use it in GitHub Desktop.
Numeric abbreviation
<?php
/* this turns numbers like 45000 into 45K */
print "0=" . numeric_abbr(0) . "\n\n";
print "9=" . numeric_abbr(9) . "\n\n";
print "10=" . numeric_abbr(10) . "\n\n";
print "100=" . numeric_abbr(100) . "\n\n";
print "999=" . numeric_abbr(999) . "\n\n";
print "1000=" . numeric_abbr(1000) . "\n\n";
print "9999=" . numeric_abbr(9999) . "\n\n";
print "10000=" . numeric_abbr(10000) . "\n\n";
print "99999=" . numeric_abbr(99999) . "\n\n";
print "100000=" . numeric_abbr(100000) . "\n\n";
print "999999=" . numeric_abbr(999999) . "\n\n";
print "1000000=" . numeric_abbr(1000000) . "\n\n";
print "1000000000=" . numeric_abbr(1000000000) . "\n\n";
print "12345.6789=" . numeric_abbr(12345.6789) . "\n\n";
function numeric_abbr($value) {
$is_negative = $value < 0;
$value = abs($value);
$abbr = '';
if ( $value >= 1000 ) {
$ranges = array(5 => 'K', 8 => 'M', 11 => 'T', 14 => 'Q');
$power = floor(log($value, 10));
foreach ($ranges as $cutoff => $this_abbr) {
if ( $power <= $cutoff ) {
$abbr = $this_abbr;
$divisor = pow(10, $cutoff - 2);
$value = $value / $divisor;
$matches = array();
if ( strlen((string) $value) > 3 && preg_match('/(\d*\.\d)\d*/', (string) $value, $matches) ) {
$value = $matches[1];
}
break;
}
}
}
if ( $is_negative ) {
$value *= -1;
}
return $value . $abbr;
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment