ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# [SplFixedArray](https://www.php.net/manual/zh/class.splfixedarray.php#class.splfixedarray) >[info] >[danger] splFixedArray数组相比标准的PHP数组更接近于C语言的数组,而且由于splFixedArray没有使用散列(Hash)存储方式,因此效率更高 > SplFixedArray与普通的PHP Array不同,它是`以数字为键名的固定长度`的数组,它没有使用散列(Hash)存储方式,更接近于C语言的数组,因此效率更高。 ## 支持的方法 ``` SplFixedArray implements Iterator , ArrayAccess , Countable { // 创建一个固定长度的数组 public __construct ([ int $size = 0 ] ) // 返回固定长度数组的大小 public int count ( void ) // 返回当前数组元素 public mixed current ( void ) // 导入一个PHP普通数组来生成SplFixedArray实例 public static SplFixedArray fromArray ( array $array [, bool $save_indexes = true ] ) // 返回固定长度数组的大小 public int getSize ( void ) // 返回当前数组元素对应的键 public int key ( void ) // 将数组游标指向下一个数组元素 public void next ( void ) // 判断数组key对应的元素是否存在 public bool offsetExists ( int $index ) // 获取数组key对应的元素 public mixed offsetGet ( int $index ) // 设置数组key对应的元素 public void offsetSet ( int $index , mixed $newval ) // 销毁数组key对应的元素 public void offsetUnset ( int $index ) // 重置数组游标 public void rewind ( void ) // 设置固定数组的大小 public int setSize ( int $size ) // 从SplFixedArray实例返回一个普通PHP的数组 public array toArray ( void ) // 判断当前数组游标指向的元素是否有效 public bool valid ( void ) // 魔术方法,反序列化时调用 public void __wakeup ( void ) } ``` ## **例子2:** ``` $arr2=['tom','bob','json','doc']; $arr3=SplFixedArray::fromArray($arr2); var_dump($arr3);//object(SplFixedArray)#3 (4) { [0]=> string(3) "tom" [1]=> string(3) "bob" [2]=> string(4) "json" [3]=> string(3) "doc" } $arr=$arr3->toArray(); var_export($arr);// array ( 0 => 'tom', 1 => 'bob', 2 => 'json', 3 => 'doc', ) ``` ## **例子2:** ``` $arr = new SplFixedArray(4); $arr[0] = 'php'; $arr[1] = 1; $arr[3] = 'python';//遍历, $arr[2] 为null foreach($arr as $v) { echo $v .'<br>'. PHP_EOL;//php 1 '' python } //获取数组长度 echo $arr->getSize(); //4 等同 echo count($arr);//4 //echo $arr->current(); //索引无效或超出范围的致命错误 echo $arr->rewind(); //重置数组游标 否则current会报错 echo $arr->current(); //php echo $arr->key(); //0 echo $arr->next(); echo $arr->current(); //1 echo $arr->key(); //1 echo '<br>'; //增加数组长度 $arr->setSize(5);//索引范围是0~4 $arr[4] = 'new one';//如果此处索引超出setSize设置的范围也会报索引无效或超出范围的致命错误 //$arr[5] = 'new one';//超出5-1报索引无效或超出范围的致命错误 //捕获异常 try{ echo $arr[10];//捕获抛出Index invalid or out of range } catch (RuntimeException $e) { echo $e->getMessage(); } ```