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实现网上点歌(二)
Oct 09 PHP
一个可以找出源代码中所有中文的工具
Oct 25 PHP
PHP中Date获取时间不正确怎么办
Jun 05 PHP
thinkphp常见路径用法分析
Dec 02 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
thinkphp分页集成实例
Jul 24 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
ThinkPHP5框架缓存查询操作分析
May 30 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 PHP
如何使用php生成zip压缩包
Apr 21 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/07/29 PHP
PHP自定义错误用法示例
2016/09/28 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
jquery 插件学习(五)
2012/08/06 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
javascript格式化日期时间方法汇总
2015/06/19 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
python使用mysql数据库示例代码
2017/05/21 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
keras slice layer 层实现方式
2020/06/11 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
外国人聘用意向书
2014/04/01 职场文书
工人先进事迹材料
2014/12/26 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers