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 相关文章推荐
浅谈Windows下 PHP4.0与oracle 8的连接设置
Oct 09 PHP
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
wiki-shan写的php在线加密的解密程序
Sep 07 PHP
PHP整合PayPal支付
Jun 11 PHP
php+ajax无刷新上传图片实例代码
Nov 17 PHP
PHP中类的继承和用法实例分析
May 24 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
PHP进程通信基础之信号量与共享内存通信
Feb 19 PHP
PHP PDOStatement::errorInfo讲解
Jan 31 PHP
深入解析PHP底层机制及相关原理
Dec 11 PHP
PHP获取学生成绩的方法
Nov 17 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
基于mysql的bbs设计(一)
2006/10/09 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
Python自省及反射原理实例详解
2020/07/06 Python
详解python中的闭包
2020/09/07 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
SQL注入攻击的种类有哪些
2013/12/30 面试题
文字自荐书范文
2014/02/10 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
Python Django ORM连表正反操作技巧
2021/06/13 Python