PHP SPL标准库 SplFixedArray 说明及和Array的性能测试
发布时间:2022-02-23 15:45:02 所属栏目:PHP教程 来源:互联网
导读:SPL - Standard PHP Library,标准PHP类库,本文我们来看看SPL标准库之数据结构SplFixedArray,及SplFixedArray和Array的性能测试对比. SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普
SPL - Standard PHP Library,标准PHP类库,本文我们来看看SPL标准库之数据结构SplFixedArray,及SplFixedArray和Array的性能测试对比. 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 ) //捕获异常 try{ echo $arr[10]; } catch (RuntimeException $e) { echo $e->getMessage(); } SplFixedArray和Array的性能测试 PHP文档专门说明: The SplFixedArray class provides the main functionalities of array. The main differences between a SplFixedArray and a normal PHP array is that the SplFixedArray is of fixed length and allows only integers within the range as indexes. The advantage is that it allows a faster array implementation. 所以在处理大型的、以数字为索引的数组时,应该用SplFixedArray来代替普通Array,下面是测试代码: <?php function pr() { $params = func_get_args(); $env = php_sapi_name(); if ("cli" == $env) { foreach ($params as $key => $value) { echo $value; } } else { foreach ($params as $key => $value) { echo "<pre>"; print_r($value); echo "</pre>"; } } } // 用来打印输出结果 <?php require dirname(__FILE__)."/function.php"; for ($size=1000; $size<=50000000; $size*=2) { pr(PHP_EOL . "Testing size: $size" . PHP_EOL); for($s = microtime(true), $container = Array(), $i = 0; $i < $size; $i++) { $container[$i] = NULL; } //Cuoxin.com pr( "Array(): " . (microtime(true) - $s) . PHP_EOL); for($s = microtime(true), $container = new SplFixedArray($size), $i = 0; $i < $size; $i++) { $container[$i] = NULL; } pr("SplArray(): " . (microtime(true) - $s) . PHP_EOL); } (编辑:91站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |