首页 > php教程 > php手册 > 正文

数据结构-阵列(数组)

WBOY
发布: 2016-10-18 08:41:39
原创
2135 人浏览过

数据结构-阵列(数组)
数组是以连续方式存储数据的结构,可通过索引访问。 不要将它们与PHP数组混淆:PHP数组实际上实现为有序哈希表。

SplFixedArray和PHP数组之间的主要区别:

SplFixedArray是固定长度的标准(标准数组),并且只允许范围内的整数作为索引。 优点是它允许更快的阵列实现。
PHP数组实际上实现为有序哈希表(一组数据的集合)。<?php <br /> <br> /*<br> 构造一个新的固定数组,指定长度为5<br> */<br> $array = new SplFixedArray(5);<br> <br> /*<br> 为指定的索引赋值<br> */<br> $array[1] = 2;<br> $array[4] = "foo";<br> <br> /*<br> 数据结构:<br> object(SplFixedArray)#1 (5) {<br>   [0]=><br>   NULL<br>   [1]=><br>   int(2)<br>   [2]=><br>   NULL<br>   [3]=><br>   NULL<br>   [4]=><br>   string(3) "foo"<br> }<br> */<br> var_dump($array);<br> <br> /*<br> 数组长度为5<br> */<br> var_dump($array->count());<br> <br> /*<br> 将数组的大小增加到10<br> */<br> $array->setSize(10);<br> <br> /*<br> 长度增加的数组,原始数据不会发生变化<br> object(SplFixedArray)#1 (10) {<br>   [0]=><br>   NULL<br>   [1]=><br>   int(2)<br>   [2]=><br>   NULL<br>   [3]=><br>   NULL<br>   [4]=><br>   string(3) "foo"<br>   [5]=><br>   NULL<br>   [6]=><br>   NULL<br>   [7]=><br>   NULL<br>   [8]=><br>   NULL<br>   [9]=><br>   NULL<br> }<br> <br> */<br> var_dump($array);<br> <br> /*<br> 为扩充长度后的数组赋值<br> */<br> $array[9] = "asdf";<br> <br> <br> /*<br> 将数组缩小到2的大小<br> 将从索引开始处,保存两个长度<br> object(SplFixedArray)#1 (2) {<br>   [0]=><br>   NULL<br>   [1]=><br>   int(2)<br> }<br> */<br> $array->setSize(2);<br> <br> <br> <br> /*<br> 以下行抛出一个RuntimeException:索引无效或超出范围<br> */ <br> try {<br>     $array["username"]="jack";<br> } catch(RuntimeException $re) {<br>     /*<br>     RuntimeException: Index invalid or out of range<br>     索引只能是整数<br>     */<br>     echo "RuntimeException: ".$re->getMessage()."\n"; <br> }<br> <br> try {<br>     $array[-1]="jack";<br> } catch(RuntimeException $re) {<br>     /*<br>     RuntimeException: Index invalid or out of range<br>     索引不合法<br>     */<br>     echo "RuntimeException: ".$re->getMessage()."\n";<br> }<br> <br> try {<br>     $array[5]="jack";<br> } catch(RuntimeException $re) {<br>     /*<br>     RuntimeException: Index invalid or out of range<br>     索引超出数组长度<br>     */<br>     echo "RuntimeException: ".$re->getMessage()."\n";<br> }<br> <br> /*<br> 查看数组大小<br> getSize/count  <br> */<br> echo $array->getSize();<br> ?><?php <br /> <br> $data=[1 => 1, 0 => 2, 3 => 3];<br> <br> $sfa = SplFixedArray::fromArray($data);<br> <br> /*<br> object(SplFixedArray)#1 (4) {<br>   [0]=><br>   int(2)<br>   [1]=><br>   int(1)<br>   [2]=><br>   NULL<br>   [3]=><br>   int(3)<br> }<br> */<br> var_dump($sfa);<br> <br> $data=[1 => 1, 2 => 2, true => 3,5=>5];<br> $sfa = SplFixedArray::fromArray($data);<br> <br> /*<br> 1 true转化为1,索引为1的数据会被更改为3<br> 2 默认保存原始索引,而且索引从0开始,数据不存在,则默认为NULL<br> object(SplFixedArray)#2 (6) {<br>   [0]=><br>   NULL<br>   [1]=><br>   int(3)<br>   [2]=><br>   int(2)<br>   [3]=><br>   NULL<br>   [4]=><br>   NULL<br>   [5]=><br>   int(5)<br> }<br> */<br> var_dump($sfa);<br> <br> $data=[1 => 1, 2 => 2, true => 3,5=>5];<br> $sfa = SplFixedArray::fromArray($data,false);<br> <br> /*<br> 1 尝试保存原始数组中使用的数字索引。默认为true;<br> 2 如果不保存原始数字索引,那么会返回非NULL的数组<br> <br> object(SplFixedArray)#1 (3) {<br>   [0]=><br>   int(3)<br>   [1]=><br>   int(2)<br>   [2]=><br>   int(5)<br> }<br> <br> */<br> var_dump($sfa);<br> <br> <br> $data=[1 => 1, 'a' => 2, true => 3];<br> /*<br> 索引必须是整数<br> Fatal error: Uncaught exception 'InvalidArgumentException' with message 'array must contain only positive integer keys'<br> */<br> //$sfa = SplFixedArray::fromArray($data);<br> <br> ?>

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板