'Sorting ip address in an application
I've built an application where IP address can't be sorted out. I am using object oriented PHP. All the ip address value has been saved as varchar and when I sort that out, it looks like this:
192.168.111.1>192.168.111.100>192.168.111.101>....>192.168.111.2>192.168.111.200>...>192.168.111.3>192.168.111.300>.......
but the sorting should be like this:
192.168.111.1>192.168.111.2>192.168.111.3>....>192.168.111.99>192.168.111.100>.....192.168.111.300
I don't know how do I sort it out, could anybody help me out? Thanks in Advance.
Solution 1:[1]
Try natural ordering: natsort
$array = ['192.168.1.1', '192.168.1.101', '192.168.1.2', '192.168.1.102', '192.168.1.3'];
natsort($array);
echo "\nNatural order sorting\n";
print_r($array);
Solution 2:[2]
Waaay late to the party, but recently I needed something similar with a twist (my IP addresses were as the array's index, ksort() would not collaborate beyond the 2st octet)... and the solution might come in handy to someone else. I leveraged the ip2long() and long2ip() functions, like:
$array = [ '192.168.200.200', '192.168.10.10', '172.16.5.5', '172.16.20.20' ];
foreach ($array as $key => $value) $array[$key] = ip2long($value);
sort($array);
foreach ($array as $key => $value) $array[$key] = long2ip($value);
print_r($array);
Array
(
[0] => 172.16.5.5
[1] => 172.16.20.20
[2] => 192.168.10.10
[3] => 192.168.200.200
)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Jasper |
| Solution 2 | briskola |
