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 执行系统命令的方法
Jul 07 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 PHP
php牛逼的面试题分享
Jan 18 PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
php根据生日计算年龄的方法
Jul 13 PHP
php实现网页缓存的工具类分享
Jul 14 PHP
ThinkPHP中order()使用方法详解
Apr 19 PHP
PHP环境搭建(php+Apache+mysql)
Nov 14 PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 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实现懒加载的方法
2015/03/07 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
Node.js编码规范
2014/07/14 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
angular.element方法汇总
2015/01/07 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
2019/07/20 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
python实现八大排序算法(2)
2017/09/14 Python
tornado 多进程模式解析
2018/01/15 Python
详解Python之unittest单元测试代码
2018/01/24 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
使用Python实现牛顿法求极值
2020/02/10 Python
python用什么编辑器进行项目开发
2020/06/17 Python
Python如何对XML 解析
2020/06/28 Python
Python实现一个优先级队列的方法
2020/07/31 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
关于感恩的演讲稿200字
2014/08/26 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
起诉意见书范文
2015/05/19 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python