Приглашаем посетить
Фет (fet.lit-info.ru)

Sorting IP Addresses (as a Human Would)

Previous
Table of Contents
Next

Sorting IP Addresses (as a Human Would)

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.

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.

NOTE

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.



Previous
Table of Contents
Next