💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
# SplFixedArray(阵列【数组】) # [SplFixedArray](https://www.php.net/manual/zh/class.splfixedarray.php#class.splfixedarray) > > splFixedArray数组相比标准的PHP数组更接近于C语言的数组,而且由于splFixedArray没有使用散列(Hash)存储方式,因此效率更高 > SplFixedArray与普通的PHP Array不同,它是`以数字为键名的固定长度`的数组,它没有使用散列(Hash)存储方式,更接近于C语言的数组,因此效率更高。 ## 支持的方法 ``` <pre class="calibre10">``` SplFixedArray implements <span class="token4">Iterator</span> <span class="token3">,</span> ArrayAccess <span class="token3">,</span> Countable <span class="token3">{</span> <span class="token">// 创建一个固定长度的数组</span> public __construct <span class="token3">(</span><span class="token3">[</span> int $size <span class="token1">=</span> <span class="token6">0</span> <span class="token3">]</span> <span class="token3">)</span> <span class="token">// 返回固定长度数组的大小</span> public int count <span class="token3">(</span> void <span class="token3">)</span> <span class="token">// 返回当前数组元素</span> public mixed current <span class="token3">(</span> void <span class="token3">)</span> <span class="token">// 导入一个PHP普通数组来生成SplFixedArray实例</span> public static SplFixedArray fromArray <span class="token3">(</span> array $array <span class="token3">[</span><span class="token3">,</span> bool $save_indexes <span class="token1">=</span> <span class="token6">true</span> <span class="token3">]</span> <span class="token3">)</span> <span class="token">// 返回固定长度数组的大小</span> public int getSize <span class="token3">(</span> void <span class="token3">)</span> <span class="token">// 返回当前数组元素对应的键</span> public int key <span class="token3">(</span> void <span class="token3">)</span> <span class="token">// 将数组游标指向下一个数组元素</span> public void next <span class="token3">(</span> void <span class="token3">)</span> <span class="token">// 判断数组key对应的元素是否存在</span> public bool offsetExists <span class="token3">(</span> int $index <span class="token3">)</span> <span class="token">// 获取数组key对应的元素</span> public mixed offsetGet <span class="token3">(</span> int $index <span class="token3">)</span> <span class="token">// 设置数组key对应的元素</span> public void offsetSet <span class="token3">(</span> int $index <span class="token3">,</span> mixed $newval <span class="token3">)</span> <span class="token">// 销毁数组key对应的元素</span> public void offsetUnset <span class="token3">(</span> int $index <span class="token3">)</span> <span class="token">// 重置数组游标</span> public void rewind <span class="token3">(</span> void <span class="token3">)</span> <span class="token">// 设置固定数组的大小</span> public int setSize <span class="token3">(</span> int $size <span class="token3">)</span> <span class="token">// 从SplFixedArray实例返回一个普通PHP的数组</span> public array toArray <span class="token3">(</span> void <span class="token3">)</span> <span class="token">// 判断当前数组游标指向的元素是否有效</span> public bool valid <span class="token3">(</span> void <span class="token3">)</span> <span class="token">// 魔术方法,反序列化时调用</span> public void __wakeup <span class="token3">(</span> void <span class="token3">)</span> <span class="token3">}</span> ``` ``` ## **例子2:** ``` <pre class="calibre10">``` $arr2<span class="token1">=</span><span class="token3">[</span><span class="token2">'tom'</span><span class="token3">,</span><span class="token2">'bob'</span><span class="token3">,</span><span class="token2">'json'</span><span class="token3">,</span><span class="token2">'doc'</span><span class="token3">]</span><span class="token3">;</span> $arr3<span class="token1">=</span>SplFixedArray<span class="token3">:</span><span class="token3">:</span><span class="token4">fromArray</span><span class="token3">(</span>$arr2<span class="token3">)</span><span class="token3">;</span> <span class="token4">var_dump</span><span class="token3">(</span>$arr3<span class="token3">)</span><span class="token3">;</span><span class="token">//object(SplFixedArray)#3 (4) { [0]=> string(3) "tom" [1]=> string(3) "bob" [2]=> string(4) "json" [3]=> string(3) "doc" }</span> $arr<span class="token1">=</span>$arr3<span class="token1">-</span><span class="token1">></span><span class="token4">toArray</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token4">var_export</span><span class="token3">(</span>$arr<span class="token3">)</span><span class="token3">;</span><span class="token">// array ( 0 => 'tom', 1 => 'bob', 2 => 'json', 3 => 'doc', )</span> ``` ``` ## **例子2:** ``` <pre class="calibre17">``` $arr <span class="token1">=</span> <span class="token5">new</span> <span class="token4">SplFixedArray</span><span class="token3">(</span><span class="token6">4</span><span class="token3">)</span><span class="token3">;</span> $arr<span class="token3">[</span><span class="token6">0</span><span class="token3">]</span> <span class="token1">=</span> <span class="token2">'php'</span><span class="token3">;</span> $arr<span class="token3">[</span><span class="token6">1</span><span class="token3">]</span> <span class="token1">=</span> <span class="token6">1</span><span class="token3">;</span> $arr<span class="token3">[</span><span class="token6">3</span><span class="token3">]</span> <span class="token1">=</span> <span class="token2">'python'</span><span class="token3">;</span><span class="token">//遍历, $arr[2] 为null</span> <span class="token4">foreach</span><span class="token3">(</span>$arr as $v<span class="token3">)</span> <span class="token3">{</span> echo $v <span class="token3">.</span><span class="token2">'<br>'</span><span class="token3">.</span> PHP_EOL<span class="token3">;</span><span class="token">//php 1 '' python</span> <span class="token3">}</span> <span class="token">//获取数组长度</span> echo $arr<span class="token1">-</span><span class="token1">></span><span class="token4">getSize</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">//4 等同 echo count($arr);//4</span> <span class="token">//echo $arr->current(); //索引无效或超出范围的致命错误</span> echo $arr<span class="token1">-</span><span class="token1">></span><span class="token4">rewind</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">//重置数组游标 否则current会报错</span> echo $arr<span class="token1">-</span><span class="token1">></span><span class="token4">current</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">//php</span> echo $arr<span class="token1">-</span><span class="token1">></span><span class="token4">key</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">//0</span> echo $arr<span class="token1">-</span><span class="token1">></span><span class="token4">next</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> echo $arr<span class="token1">-</span><span class="token1">></span><span class="token4">current</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">//1</span> echo $arr<span class="token1">-</span><span class="token1">></span><span class="token4">key</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">//1</span> echo <span class="token2">'<br>'</span><span class="token3">;</span> <span class="token">//增加数组长度</span> $arr<span class="token1">-</span><span class="token1">></span><span class="token4">setSize</span><span class="token3">(</span><span class="token6">5</span><span class="token3">)</span><span class="token3">;</span><span class="token">//索引范围是0~4</span> $arr<span class="token3">[</span><span class="token6">4</span><span class="token3">]</span> <span class="token1">=</span> <span class="token2">'new one'</span><span class="token3">;</span><span class="token">//如果此处索引超出setSize设置的范围也会报索引无效或超出范围的致命错误 </span> <span class="token">//$arr[5] = 'new one';//超出5-1报索引无效或超出范围的致命错误</span> <span class="token">//捕获异常</span> <span class="token5">try</span><span class="token3">{</span> echo $arr<span class="token3">[</span><span class="token6">10</span><span class="token3">]</span><span class="token3">;</span><span class="token">//捕获抛出Index invalid or out of range</span> <span class="token3">}</span> <span class="token5">catch</span> <span class="token3">(</span><span class="token4">RuntimeException</span> $e<span class="token3">)</span> <span class="token3">{</span> echo $e<span class="token1">-</span><span class="token1">></span><span class="token4">getMessage</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> ``` ```