PHP SPL标准库之SplFixedArray使用实例
SplFixedArray主要是处理数组相关的主要功能,与普通phparray不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快。
看看我本机的Benchmark测试:
ini_set('memory_limit','12800M');
for($size=10000;$size<10000000;$size*=4){
echoPHP_EOL."Testingsize:$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=newSplFixedArray($size),$i=0;$i<$size;$i++)$container[$i]=NULL;
echo"SplArray():".(microtime(true)-$s).PHP_EOL;
}
结果如下:
Testingsize:10000 Array():0.004000186920166 SplArray():0.0019998550415039 Testingsize:40000 Array():0.017001152038574 SplArray():0.0090007781982422 Testingsize:160000 Array():0.050002098083496 SplArray():0.046003103256226 Testingsize:640000 Array():0.19701099395752 SplArray():0.16700983047485 Testingsize:2560000 Array():0.75704312324524 SplArray():0.67303895950317
通常情况下SplFixedArray要比phparray快上20%~30%,所以如果你是处理巨大数量的固定长度数组,还是强烈建议使用。
SplFixedArray类摘要如下:
SplFixedArrayimplementsIterator,ArrayAccess,Countable{
/*方法*/
public__construct([int$size=0])
publicintcount(void)
publicmixedcurrent(void)
publicstaticSplFixedArrayfromArray(array$array[,bool$save_indexes=true])
publicintgetSize(void)
publicintkey(void)
publicvoidnext(void)
publicbooloffsetExists(int$index)
publicmixedoffsetGet(int$index)
publicvoidoffsetSet(int$index,mixed$newval)
publicvoidoffsetUnset(int$index)
publicvoidrewind(void)
publicintsetSize(int$size)
publicarraytoArray(void)
publicboolvalid(void)
publicvoid__wakeup(void)
}
使用SplFixedArray:
$arr=newSplFixedArray(4);
$arr[0]='php';
$arr[1]=1;
$arr[3]='python';
//遍历,$arr[2]为null
foreach($arras$v){
echo$v.PHP_EOL;
}
//获取数组长度
echo$arr->getSize();//4
//增加数组长度
$arr->setSize(5);
$arr[4]='newone';
//捕获异常
try{
echo$arr[10];
}catch(RuntimeException$e){
echo$e->getMessage();
}