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数组应用之比较两个时间的相减排序
Aug 18 PHP
php初学者写及时补给skype用户充话费的小程序
Nov 02 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
php 使用array函数实现分页
Feb 13 PHP
php中stdClass的用法分析
Feb 27 PHP
PHP设计模式之适配器模式代码实例
May 11 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
如何打开php的gd2库
Feb 09 PHP
利用ajax和PHP实现简单的流程管理
Mar 23 PHP
PHP微商城开源代码实例
Mar 27 PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 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在Web开发领域的优势
2006/10/09 PHP
基于pear auth实现登录验证
2010/02/26 PHP
php通过字符串调用函数示例
2014/03/02 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
浅谈js的异步执行
2016/10/18 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
Django文件存储 自己定制存储系统解析
2019/08/02 Python
Python实现打印实心和空心菱形
2019/11/23 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
酒店公关部经理岗位职责
2013/11/24 职场文书
土建资料员岗位职责
2014/01/04 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS