natsort($a);
Sorting IP addresses with sort()
does not really work because if sorting as strings, '100.200.300.400'
is less than '50.60.70.80'
(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
<?php $a = array('100.200.300.400', '100.50.60.70', '100.8.9.0'); natsort($a); 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 http://sourcefrog.net/projects/natsort/
. 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.