PHP SPL标准库之SplFixedArray使用实例


Posted in PHP onMay 12, 2015

SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快。

看看我本机的Benchmark测试:

ini_set('memory_limit','12800M');
 
for($size = 10000; $size < 10000000; $size *= 4) {
  echo PHP_EOL . "Testing size: $size" . PHP_EOL;
  for($s = microtime(true), $container = Array(), $i = 0; $i < $size; $i++) $container[$i] = NULL;
  echo "Array(): " . (microtime(true) - $s) . PHP_EOL;
 
  for($s = microtime(true), $container = new SplFixedArray($size), $i = 0; $i < $size; $i++) $container[$i] = NULL;
  echo "SplArray(): " . (microtime(true) - $s) . PHP_EOL;
}

结果如下:

Testing size: 10000
Array(): 0.004000186920166
SplArray(): 0.0019998550415039
 
Testing size: 40000
Array(): 0.017001152038574
SplArray(): 0.0090007781982422
 
Testing size: 160000
Array(): 0.050002098083496
SplArray(): 0.046003103256226
 
Testing size: 640000
Array(): 0.19701099395752
SplArray(): 0.16700983047485
 
Testing size: 2560000
Array(): 0.75704312324524
SplArray(): 0.67303895950317

通常情况下SplFixedArray要比php array快上20%~30%,所以如果你是处理巨大数量的固定长度数组,还是强烈建议使用。
SplFixedArray类摘要如下:

SplFixedArray implements Iterator  , ArrayAccess  , Countable  {
  /* 方法 */
  public __construct ([ int $size = 0 ] )
  public int count ( void )
  public mixed current ( void )
  public static SplFixedArray fromArray ( array $array [, bool $save_indexes = true ] )
  public int getSize ( void )
  public int key ( void )
  public void next ( void )
  public bool offsetExists ( int $index )
  public mixed offsetGet ( int $index )
  public void offsetSet ( int $index , mixed $newval )
  public void offsetUnset ( int $index )
  public void rewind ( void )
  public int setSize ( int $size )
  public array toArray ( void )
  public bool valid ( void )
  public void __wakeup ( void )
}

 使用SplFixedArray:

$arr = new SplFixedArray(4);
$arr[0] = 'php';
$arr[1] = 1;
$arr[3] = 'python';
 
//遍历, $arr[2] 为null
foreach($arr as $v) {
  echo $v . PHP_EOL;
}
 
//获取数组长度
echo $arr->getSize(); //4
 
//增加数组长度
$arr->setSize(5);
$arr[4] = 'new one';
 
//捕获异常
try{
  echo $arr[10];
} catch (RuntimeException $e) {
  echo $e->getMessage();
}
PHP 相关文章推荐
如何在PHP中使用Oracle数据库(1)
Oct 09 PHP
php 无限级缓存的类的扩展
Mar 16 PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
php不用正则验证真假身份证
Nov 06 PHP
php打开远程文件的方法和风险及解决方法
Nov 12 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
PHP单例模式详细介绍
Jul 01 PHP
php版微信js-sdk支付接口类用法示例
Oct 12 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
php中get_defined_constants函数用法实例分析
May 12 #PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 #PHP
php遍历类中包含的所有元素的方法
May 12 #PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 #PHP
php实现每天自动变换随机问候语的方法
May 12 #PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 #PHP
php对象和数组相互转换的方法
May 12 #PHP
You might like
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
php中随机显示图片的函数代码
2011/06/23 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
python获取目录下所有文件的方法
2015/06/01 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
python画环形图的方法
2020/03/25 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
用Python 执行cmd命令
2020/12/18 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
法院先进个人事迹材料
2014/05/04 职场文书
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
企业法律事务工作总结
2015/08/11 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python