首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种高效的方法来对PHP中的打包字符串进行排序?

问是否有一种高效的方法来对PHP中的打包字符串进行排序?
EN

Stack Overflow用户
提问于 2015-02-07 15:24:16
回答 1查看 327关注 0票数 0

我有一个PHP应用程序,它需要按排序顺序存储IPv6地址。我已经为IPv6地址编写了一个比较操作,它使用了"inet“和"gmp”库函数,但我正在寻找一种更有效的方法--理想的方法是直接对IPv6地址的16字节填充字符串表示进行操作。是否有一种方便的方法(无需编译自定义PHP扩展)?

编辑:在这里,我对时间和空间效率都感兴趣,这就是为什么我被使用打包字符串表示的想法所吸引。虽然我知道路由器用于优化某些搜索操作的IPv6集有一些花哨的基于trie的表示,但我并不要求引用这个问题中的任何C库或研究论文。我专门问的是PHP中的排序,这与C、Perl或Python中的排序非常不同。要管理的地址数量是<1亿,但超过100万。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-09 03:30:18

正如迈克尔·汉普顿在评论中指出的那样,排序()和ksort()应该在打包的字符串上很好地工作。下面是一个演示的脚本:

代码语言:javascript
复制
<?php

if (defined('AF_INET6')) {
    echo "PHP was compiled without --disable-ipv6 option";
} else {
    echo "PHP was compiled with --disable-ipv6 option";
}

$a = array(
    inet_pton('::1'),
    inet_pton('1::'),
    inet_pton('::a'),
    inet_pton('a::'),
    inet_pton('20::'),
    inet_pton('::20'),
    inet_pton('9::'),
    inet_pton('::9')
);

print "\nbefore sort:\n";
foreach ($a as $r) { print inet_ntop($r) . "\n"; flush(); }

sort($a);

print "\nafter sort:\n";
foreach ($a as $r) { print inet_ntop($r) . "\n"; flush(); }

当我在我的开发环境中运行这个程序时,我得到了以下输出,这是正确的:

代码语言:javascript
复制
PHP was compiled without --disable-ipv6 option
before sort:
::1
1::
::a
a::
20::
::20
9::
::9

after sort:
::1
::9
::a
::20
1::
9::
a::
20::

因此,好消息似乎是inet_pton()、inet_ntop()、sort()和ksort()将按照我希望的方式“工作”。

这让我很开心。并惊讶,以一种很好的方式,PHP!

编辑:看上去像是一个pton,它使迈克尔·汉普顿的“明显”方法的使用复杂化了。幸运的是,有很多方法可以解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28383876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档