PHP SPL标准库之SplFixedArray简介

SplFixedArray与普通的PHP Array不同,它是以数字为键名的固定长度的数组,它没有使用散列(Hash)存储方式,更接近于C语言的数组,因此效率更高。

接口摘要如下:

SplFixedArray implements Iterator , ArrayAccess , Countable {
    // 创建一个固定长度的数组
    public __construct ([ int $size = 0 ] )
    // 返回固定长度数组的大小
    public int count ( void )
    // 返回当前数组元素
    public mixed current ( void )
    // 导入一个PHP普通数组来生成SplFixedArray实例
    public static SplFixedArray fromArray ( array $array [, bool $save_indexes = true ] )
    // 返回固定长度数组的大小
    public int getSize ( void )
    // 返回当前数组元素对应的键
    public int key ( void )
    // 将数组游标指向下一个数组元素
    public void next ( void )
    // 判断数组key对应的元素是否存在
    public bool offsetExists ( int $index )
    // 获取数组key对应的元素
    public mixed offsetGet ( int $index )
    // 设置数组key对应的元素
    public void offsetSet ( int $index , mixed $newval )
    // 销毁数组key对应的元素
    public void offsetUnset ( int $index )
    // 重置数组游标
    public void rewind ( void )
    // 设置固定数组的大小
    public int setSize ( int $size )
    // 从SplFixedArray实例返回一个普通PHP的数组
    public array toArray ( void )
    // 判断当前数组游标指向的元素是否有效
    public bool valid ( void )
    // 魔术方法,反序列化时调用
    public void __wakeup ( void )
}
性能测试:

<?php 
for($size = 2000; $size < 3000000; $size *= 2) { 
    echo  "Testing size: $size" . '<br/>'; 
    for($s = microtime(true), $container = Array(), $i = 0; $i < $size; $i++) $container[$i] = NULL; 
    echo "Array(): " . (microtime(true) - $s) . '<br/>'; 

    for($s = microtime(true), $container = new SplFixedArray($size), $i = 0; $i < $size; $i++) $container[$i] = NULL; 
    echo "SplArray(): " . (microtime(true) - $s) . '<br/>'; 
} 
?>
输出:

Testing size: 2000
Array(): 0.00025796890258789
SplArray(): 0.00016403198242188
Testing size: 4000
Array(): 0.00034499168395996
SplArray(): 0.00035691261291504
Testing size: 8000
Array(): 0.00068116188049316
SplArray(): 0.00094199180603027
Testing size: 16000
Array(): 0.0016441345214844
SplArray(): 0.0014150142669678
Testing size: 32000
Array(): 0.0030548572540283
SplArray(): 0.0026488304138184
Testing size: 64000
Array(): 0.0068099498748779
SplArray(): 0.0023999214172363
Testing size: 128000
Array(): 0.0064020156860352
SplArray(): 0.0048229694366455
Testing size: 256000
Array(): 0.012426853179932
SplArray(): 0.0084249973297119
Testing size: 512000
Array(): 0.018292903900146
SplArray(): 0.013427019119263
Testing size: 1024000
Array(): 0.033282995223999
SplArray(): 0.023661136627197
Testing size: 2048000
Array(): 0.068041086196899
SplArray(): 0.047233104705811

结果说明:

SplFixedArray确实比PHP Array要快,而且数据量越大越明显。

使用示例:

<?php
$splArray = new SplFixedArray(5);
$splArray[1] = 'cat';
$splArray[4] = 'dog';
var_dump($splArray);
unset($splArray);

$splArray = SplFixedArray::fromArray(array('cat','pig','dog'));
var_dump($splArray);
var_dump($splArray->getSize());
var_dump($splArray->toArray());
?>
以上输出:

object(SplFixedArray)#1 (5) { [0]=> NULL [1]=> string(3) "cat" [2]=> NULL [3]=> NULL [4]=> string(3) "dog" } 
object(SplFixedArray)#1 (3) { [0]=> string(3) "cat" [1]=> string(3) "pig" [2]=> string(3) "dog" } 
int(3) 
array(3) { [0]=> string(3) "cat" [1]=> string(3) "pig" [2]=> string(3) "dog" }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值