資料結構-陣列(數組)
數組是一種以連續方式儲存資料的結構,可透過索引存取。 不要將它們與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>
?>