Ordenar IPs con PHP

By Mancho

Vamos a ver como ordenar IPs obtenidas desde MySQL en formato string de la siguiente forma:

  • 127.0.0.1
  • 127.0.0.2
  • 127.0.0.3
  • 127.0.0.4
  • 127.0.0.5
  • 127.0.0.6
  • 127.0.0.7
  • 127.0.0.8
  • 127.0.0.9
  • 127.0.0.10
  • 127.0.0.11

Y así sucesivamente. El problema del ordenamiento de IPs surge en la consulta MySQL, al querer ordenar las IPs mediante un ORDER BY la consulta nos manda las IPs semi ordenadas. Entonces vamos a hacer lo siguiente:

Supongamos que tenemos la siguiente tabla en la base de datos:

Tabla ips
id : integer
ip : varchar

Entonces hacemos la consulta para traer todas las IPs:

$consulta = mysql_query(“SELECT * FROM ips”);

Luego recorremos la consulta y hacemos lo siguiente:

$i = 0;
while($ip = mysql_fetch_assoc($consulta)){
$ips[$i] = $ip['ip'];
$ipp = explode(“.”, $ip['ip']);
$ipn[$i] = $ipp[0]*1000000000 + $ipp[1]*1000000 + $ipp[2]*1000 + $ipp[3];
unset($ipp);
$i++;
}

Por último ordenamos las IPs:

array_multisort($ipn, SORT_ASC, SORT_NUMERIC, $ips);

Listo ahora tenemos en $ips nuestras IPs ordenadas correctamente!!

Etiquetas: , ,

Una respuesta para “Ordenar IPs con PHP”

  1. Nacho Dice:

    Buena mancho! Nunca se me había planteado la necesidad pero veo el problema. :-D
    Otra sería tenerlas almacenadas en la DB como
    tabla_ip [parte1,parte2,parte3,parte4] (Pero eso sería si se puede cambiar el diseño dela DB).

    Con eso harías
    SELECT parte1,parte2,parte3,parte4
    FROM tabla_ip
    ORDER BY parte1,parte2,parte3,parte4;

Escribe un comentario