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 采集程序 常用函数
Dec 18 PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
分享一个php 的异常处理程序
Jun 22 PHP
thinkphp连贯操作实例分析
Nov 22 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
php中strtotime函数性能分析
Nov 20 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
PHP的new static和new self的区别与使用
Nov 27 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
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
Win10下python3.5和python2.7环境变量配置教程
2018/09/18 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
python实现字典嵌套列表取值
2019/12/16 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
Linux面试题LINUX系统类
2015/11/25 面试题
文秘专业大学生求职信
2013/11/10 职场文书
跟单文员岗位职责
2014/01/03 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
python tkinter实现定时关机
2021/04/21 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
浅析Python OpenCV三种滤镜效果
2022/04/11 Python