Sorting IP Addresses (as a Human Would)


Sorting IP addresses with sort() does not really work because if sorting as strings, '100.200.300.400' is less than '' (and not even a valid IP address, but this is not the point here). In addition, there are more than just digits within the string, so a numerical sorting does not work.

natsort function syntax

bool natsort ( array &$array )

This function implements a sort algorithm that orders alphanumeric strings in the way a human being would while maintaining key/value associations and returns TRUE on success or FALSE on failure. This function accepts only one parameter the input array.

The natcasesort function

This function is identical to natsort but this function ignores the case.

Sorting IP Addresses Using a Natural Order String Comparison

  $a = array('100.200.300.400', '',
  echo implode(' < ', $a);

What is needed in this case is a so-called natural sorting, something that has been implemented by Martin Pool's Natural Order String Comparison project at In PHP's natcasesort() function, this algorithm is used. According to the description, it sorts "as a human would." When case sensitivity is an issue, natsort() can be used. The preceding code shows the latter function.

Internally, natsort() uses strnatcmp() (and natcasesort() uses strnatcasecmp()), which does a "natural" comparison of two strings. By calling this function a number of times, the array elements are brought into the correct order.