文档章节

php的Judy Array

inuxor
 inuxor
发布于 2015/09/08 17:53
字数 698
阅读 77
收藏 0

简介

说来这个Judy本是个C包,要解决的是数组这种东西忒占地方的问题,也就是所谓稀疏数组sparse array。这个事在php里面本不是个事。php的数组迥异于多数语言,是个散列、数组以及其他结构的大杂烩,要稀疏就稀疏,想密集就密集。怎么实现的不必管他,管他也没什么卵用,没几个人真去自己修改php本身的源码——那就本末倒置了。 那么php里面用Judy干什么呢?据说是为了性能。好,性能这个东西越高越好,前提是不能影响到开发难度或者说代码行数。幸亏php的Judy实现很有人情味。手册是这样写的:

The Judy class implements the ArrayAccess interface and the Iterator interface. This class, once instantiated, can be accessed like a PHP array. A PHP Judy object (or Judy Array) can be one of the following type :

  1. Judy::BITSET
  2. Judy::INT_TO_INT
  3. Judy::INT_TO_MIXED
  4. Judy::STRING_TO_INT
  5. Judy::STRING_TO_MIXED

作为嫌麻烦的php人,重点就是这一句:

can be accessed like a PHP array

跟php数组一样访问,那不就行了。

安装

RTFM找到如下链接:pecl :: Judy 点进去该下载下载,该编译编译 windows直接下dll就行,linux估计各发行版源都有。没有也没关系,linux编译个东西太简单了。先编译 libJudy 然后就是老规矩:

phpize
     ./configure --with-judy[=DIR]
     make
     make test
     make install

其实以上都是废话,二进制包必然都有,用不着自己去弄。

用法

以下代码是官方的,列出judy的所有可用方法和函数以及版本,无甚卵用。

<?php
$br = (php_sapi_name() == "cli")? "":"<br>";

if(!extension_loaded('judy')) {
	dl('judy.' . PHP_SHLIB_SUFFIX);
}

judy_version();
echo "$br\n";

$module = 'judy';
$functions = get_extension_funcs($module);
echo "Functions available in the $module extension:$br\n";
foreach($functions as $func) {
    echo "\t$func()$br\n";
}
echo "$br\n";
$constants = get_defined_constants(true);
echo "Constants available in $module extension:$br\n";
if (in_array($module, $constants)) {
  foreach ($constants[$module] as $const => $v) {
    echo "\t$const => $v$br\n";
  }
}

$class=array('Judy');
foreach ($class as $c) {
    echo "$br\n";
    $class_methods = get_class_methods($c);
    echo "$c class methods:$br\n";
    foreach ($class_methods as $method_name) {
        echo "\t$c::$method_name()$br\n";
    }
}

直接看文档。在php手册里边搜judy即可了。

马上下班,写个小例子,用于解决用户级别之类的问题最好不过。就是贫农地主宰相娘娘那种给定分数区间算称号的那种。别TMcase来case去了,咱查表法吧。

<?php
//3分和5分之间的都算三分,给个级别叫1级
$judy = new Judy(Judy :: INT_TO_INT);
$judy[5] = 2;
$judy[3] = 1;
$judy[6] = 3;

echo $judy->offSetGet($judy->last(4));
//1

就是这么任性,比自己写好看多了吧。

就到这里。

© 著作权归作者所有

inuxor

inuxor

粉丝 33
博文 26
码字总数 15014
作品 0
技术主管
私信 提问
jUDDI

jUDDI (音"Judy")是一个开源的UDDI的Java实现。主要特性包括: 开源 跨平台 支持从JDK1.3到1.6 遵循UDDI 2.0 支持各种ANSI标准的SQL数据库 Deployable on any Java application server that...

匿名
2008/09/13
2.3K
0
PHP函数使用记录

array_flip:交换数组中的键和值 http://php.net/manual/zh/function.array-flip.php array_slice:从数组中取出一段 http://php.net/manual/zh/function.array-slice.php array_splice:把数......

专业填坑
2016/04/21
16
0
php 操作数组 (合并,拆分,追加,查找,删除等)

合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加。其形式为: Php代码 收藏代码 array array_...

mdoo
2016/09/04
28
0
php数组array_filter()函数和array_slice()函数

<?php / arrayfilter()用回调函数过滤数组中的单元 arrayfilter(array,function) 参数描述:如果自定义过滤函数返回 true,则被操作的数组的当前值就会被包含在返回的结果数组中, 并将结果组成...

BearCatYN
2015/03/26
402
0
PHP操作MongoDB实例

PHP的mongodb扩展安装 1 2 3 4 5 6 # https://github.com/mongodb/mongo-php-driver/archive/master.zip # unzip master.zip # /usr/local/php/bin/phpize # ./config --with-php-config=/us......

rihgtzhao
2015/09/09
104
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员Java教程分享Zookeeper基本原理与运用场景

好程序员Java教程分享Zookeeper基本原理与运用场景一、什么是Zookeeper? zookeeper是一个分布式的一致性协调服务。 换句话说,也可以把zookeeper看成一个小型的分布式文件系统。但是和FastD...

好程序员官网
11分钟前
3
0
mysql表情符

1 修改表字段为utf8md4 ALTER table property_info MODIFY `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL 2 MySQL数据库服务器配置文件mysqld.cn......

干死it
30分钟前
2
0
正则表达式的基本语法

本文摘自LTP.NET知识库。 正则表达式的形式一般如下: /love/ 其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。 用户只要把希望查找匹配对象的模式内容放入“/”定界符之...

木庄
32分钟前
3
0
java 框架有哪些?

十大常用框架: 一、SpringMVC 二、Spring 三、Mybatis 四、Dubbo 五、Maven 六、RabbitMQ 七、Log4j 八、Ehcache 九、Redis 十、Shiro 延展阅读: 一、SpringMVC Spring Web MVC是一种基于J...

java框架开发者
33分钟前
6
0
细谈Mysql事务

文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 上一篇着重谈到了MySQL锁的概念,里面谈到了事务的概念,其实大部分开发者对于事务肯定不陌生,...

程序猿周先森
41分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部