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(); }