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 '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.
Sorting IP Addresses Using a Natural Order String Comparison (natsort.php)
<?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. |
|