对应用程序中的ip地址进行排序


Sorting ip address in an application

我构建了一个IP地址无法排序的应用程序。我正在使用面向对象的PHP。所有的ip地址值都保存为varchar,当我对其进行排序时,它看起来像这样:

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>.......

,但是排序应该是这样的:

192.168.111.1>192.168.111.2>192.168.111.3>....>192.168.111.99>192.168.111.100>.....192.168.111.300

我不知道该怎么解决这个问题,有人能帮我吗?

尝试自然排序: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);

来晚了,但最近我需要一些类似的东西(我的IP地址作为数组的索引,ksort()将不会协作超过第21八位字节)…这个解决方案可能对其他人有用。我利用了ip2long()long2ip()函数,如:

$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
)