您的位置:首页 > 编程语言 > PHP开发

PHP SPL标准库之SplFixedArray简介

2016-07-11 15:51 246 查看
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
4000
(): 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" }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: