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 相关文章推荐
PHP5 安装方法
Jan 15 PHP
用PHP的ob_start();控制您的浏览器cache!
Feb 14 PHP
php下将XML转换为数组
Jan 01 PHP
php 过滤器实现代码
Aug 09 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
PHP警告Cannot use a scalar value as an array的解决方法
Jan 11 PHP
php获取目录所有文件并将结果保存到数组(实例)
Oct 25 PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
php生成条形码的图片的实例详解
Sep 13 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 PHP
PHP数组访问常用方法解析
Sep 05 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
一个简单计数器的源代码
2006/10/09 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
react基本安装与测试示例
2020/04/27 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
Python中统计函数运行耗时的方法
2015/05/05 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
pycharm快捷键汇总
2020/02/14 Python
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
大学生关于奋斗的演讲稿
2014/01/09 职场文书
银行存款证明样本
2014/01/17 职场文书
快餐店的创业计划书范文
2014/01/29 职场文书
校园之声广播稿
2014/01/31 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
2016年教师节慰问信
2015/12/01 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS