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 02 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
微信支付开发教程(一)微信支付URL配置
May 28 PHP
php生成随机颜色的方法
Nov 13 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
PHP验证码生成原理和实现
Jan 24 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 PHP
YII框架页面缓存操作示例
Apr 29 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 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中使用反射技术的架构插件使用说明
2010/05/18 PHP
php 网上商城促销设计实例代码
2012/02/17 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
js实现抽奖效果
2017/03/27 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
2020/03/02 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
Python 的内置字符串方法小结
2016/03/15 Python
Python实现批量压缩图片
2018/01/25 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
python实现聊天小程序
2018/03/13 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
工作表现自我评价
2014/02/08 职场文书
企业授权委托书范本
2014/09/22 职场文书
颐和园导游词400字
2015/01/30 职场文书
考勤制度通知
2015/04/25 职场文书
论语读书笔记
2015/06/26 职场文书