Cómo crear la abreviación de un número en PHP

Cómo crear la abreviación de un número en PHP

Actualmente el canal de youtube con más suscriptores tiene aproximadamente 65119648 suscriptores. Probablemente no leiste el numero pues no hay ni puntuación o abreviación que haga fácil leerlo, así que una abreviación como 65M o 6511K sería más sencilla de leer verdad? Un monto de gente realmente estima la implementación de una caracteristica así en una aplicación, así que si tu sitio web o aplicación manipula números extensos que probablemente nadie quiera leer, simplemente muestrales una abreviatura.

En este artículo, te mostraremos 2 implementaciones para generar la abreviación de un número con PHP.

A. Abreviación exacta

Si estás dispuesto a mostrar una abreviación exacta del numero dado, esta implementación hará el trabajo por ti:

<?php 

/**
 * Función que convierte un valor numérico en una abreviatura exacta
 */
function number_format_short( $n, $precision = 1 ) {
	if ($n < 900) {
		// 0 - 900
		$n_format = number_format($n, $precision);
		$suffix = '';
	} else if ($n < 900000) {
		// 0.9k-850k
		$n_format = number_format($n / 1000, $precision);
		$suffix = 'K';
	} else if ($n < 900000000) {
		// 0.9m-850m
		$n_format = number_format($n / 1000000, $precision);
		$suffix = 'M';
	} else if ($n < 900000000000) {
		// 0.9b-850b
		$n_format = number_format($n / 1000000000, $precision);
		$suffix = 'B';
	} else {
		// 0.9t+
		$n_format = number_format($n / 1000000000000, $precision);
		$suffix = 'T';
	}
  // Remover ceros innecesarios despues del decimal. "1.0" -> "1"; "1.00" -> "1"
  // pero intencionalmente no afecta parciales, eg "1.50" -> "1.50"
	if ( $precision > 0 ) {
		$dotzero = '.' . str_repeat( '0', $precision );
		$n_format = str_replace( $dotzero, '', $n_format );
	}
	return $n_format . $suffix;
}

Esto significa mostrar la abreviación del número con decimales p. ej.:

<?php 

$examples = array(15, 129, 400, 1500, 14350, 30489, 50222, 103977 , 2540388, 53003839);

foreach($examples as $example){
    echo "$example => " . number_format_short($example) . "\n";
}

/*

Genera: 
	15 => 15
	129 => 129
	400 => 400
	1500 => 1.5K
	14350 => 14.4K
	30489 => 30.5K
	50222 => 50.2K
	103977 => 104K
	2540388 => 2.5M
	53003839 => 53M
*/

Esta implementación usa la función number_format de PHP, que formatea un número agrupado en unidades de mil.

B. Abreviación general

Si deseas mostrar solamente la parte más importante del número dado (sin exactitud de grupos de miles), esta implementación es la que necesitas:

<?php 

/**
 * Función que convierte un valor numérico en una abreviatura.
 */
function number_format_short( $n ) {
	if ($n > 0 && $n < 1000) {
		// 1 - 999
		$n_format = floor($n);
		$suffix = '';
	} else if ($n >= 1000 && $n < 1000000) {
		// 1k-999k
		$n_format = floor($n / 1000);
		$suffix = 'K+';
	} else if ($n >= 1000000 && $n < 1000000000) {
		// 1m-999m
		$n_format = floor($n / 1000000);
		$suffix = 'M+';
	} else if ($n >= 1000000000 && $n < 1000000000000) {
		// 1b-999b
		$n_format = floor($n / 1000000000);
		$suffix = 'B+';
	} else if ($n >= 1000000000000) {
		// 1t+
		$n_format = floor($n / 1000000000000);
		$suffix = 'T+';
	}

	return !empty($n_format . $suffix) ? $n_format . $suffix : 0;
}

En vez de generar una abreviación con decimales, el snippet añadira al numero principal un simbolo de suma p. ej.:

<?php

$examples = array(15, 129, 400, 1500, 14350, 30489, 50222, 103977 , 2540388, 53003839);

foreach($examples as $example){
    echo "$example => " . number_format_short($example) . "\n";
}

/*

Genera: 
	15 => 15
    129 => 129
    400 => 400
    1500 => 1K+
    14350 => 14K+
    30489 => 30K+
    50222 => 50K+
    103977 => 103K+
    2540388 => 2M+
    53003839 => 53M+
*/

Que te diviertas !

Esto podría ser de tu interes

Conviertete en un programador más sociable