数据结构-阵列(数组)
数组是以连续方式存储数据的结构,可通过索引访问。 不要将它们与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>
?>