This article mainly introduces the use examples of SplFixedArray in the PHP SPL standard library. SplFixedArray is mainly used to handle the main functions related to arrays. It is Fixed length, faster than ordinary array processing, friends in need can refer to it
SplFixedArray is mainly used to process arrays. Different from ordinary php arrays, it is a fixed-length array with numbers as key names. The advantage is that it is faster than ordinary array processing.
Take a look at my local Benchmark test:
?
2 3
|
<🎜> <🎜>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;<🎜> <🎜>}<🎜> <🎜> |
<🎜>1<🎜> <🎜>2<🎜> <🎜>3<🎜> <🎜>4<🎜> <🎜>5<🎜> <🎜>6<🎜> <🎜>7<🎜> <🎜>8<🎜> <🎜>9<🎜> <🎜>10<🎜> <🎜>11<🎜> <🎜>12<🎜> <🎜>13<🎜> <🎜>14<🎜> <🎜>15<🎜> <🎜>16<🎜> <🎜>17<🎜> <🎜>18<🎜> <🎜>19<🎜> | <🎜> <🎜>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<🎜> <🎜> |
Usually SplFixedArray is 20%~30% faster than PHP array, so if you are dealing with a huge number of fixed-length arrays, it is still strongly recommended to use it.
The SplFixedArray class summary is as follows:
?
2 3
5 12 13 |
SplFixedArray implements Iterator , ArrayAccess , Countable { /* Method */ 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) } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $arr = new SplFixedArray(4); $arr[0] = 'php'; $arr[1] = 1; $arr[3] = 'python'; //Traverse, $arr[2] is null foreach($arr as $v) { echo $v . PHP_EOL; } //Get the array length echo $arr->getSize(); //4 //Increase the array length $arr->setSize(5); $arr[4] = 'new one'; //Catch exception try{ echo $arr[10]; } catch (RuntimeException $e) { echo $e->getMessage(); } |