在強類型的變成語言中,有專用的數據結構解決方案。一般都是建立一個容器,在這個容器中能夠存儲任意類型的數據,而且能夠根據容器中存儲的數據決定容器的容量,達到能夠變長的容器結構,好比鏈表、堆棧及隊列等都是數據結構中經常使用的形式。在PHP中,一般都是使用數組來完成其餘語言使用數據結構才能完成的工做。它是弱類型語言,在同一個數組中就能夠存儲多種類型的數據,並且PHP中的數組沒有長度限制,數組存儲數據的容量還能夠根據裏面元素個數的增減自動調整。php
1、使用數組實現堆棧html
堆棧是數據結構的一種實現形式,是一種使用很是普遍的存儲數據的容器。在堆棧這種容器中,最後壓入的數據(進桟),將會被最早彈出(出棧)。即在數據存儲時採用「先進後出」的數據結構。在PHP中,將數組當作一個棧,使用array_push()和array_pop()兩個系統函數便可完成數據的進桟和出棧操做。web
①函數array_push()數組
array_push()函數向第一個參數的數組尾部添加一個或多個元素(入棧),而後返回新數組的長度。該函數等於屢次調用$array[]=$value。其函數的原型以下:數據結構
int array_push(array &array ,mixed var [,mixed...])函數
該函數的第一個參數是必選的,做爲棧容器的一個數組。第二個參數也是必選的,在第一個參數中的數組尾部添加的一個數據。還能夠有多個可選參數,均可以添加到第一個參數的數組中的尾部,即入棧。但須要注意即便數組中有字符串鍵名,添加的元素也始終是數字鍵。函數array_push()使用的代碼以下所示:學習
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?php
$a
=
array
(
"Dog"
,
"Cat"
);
array_push
(
$a
,
"Horse"
,
"Bird"
);
print_r(
$a
);
//輸出Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird )
//帶有字符串鍵的數組:
$a
=
array
(
"a"
=>
"Dog"
,
"b"
=>
"Cat"
);
array_push
(
$a
,
"Horse"
,
"Bird"
);
print_r(
$a
);
//輸出Array ( [a] => Dog [b] => Cat [0] => Horse [1] => Bird )
//使用array_push()函數和使用這種直接賦值初始化數組的方式是同樣的
$lamp
[
"web"
]=
"www"
;
print_r(
$a
)
//輸出Array ( [a] => Dog [b] => Cat [0] => Horse [1] => Bird [web]=> www)
?>
|
若是用array_push()來給數組添加一個單元,還不如用「$array[]=$value」形式,由於這樣沒有調用函數的額外負擔,並且使用後者還能夠添加鍵值是字符串的關聯數組。若是第一個參數不是數組,array_push()將發出一條警告。這和「$array[]=$value」的行爲不一樣,後者會新建一個數組。spa
②array_pop(array &array)code
array_pop函數刪除數組中的最後一個元素,即將數組最後一個單元彈出(出棧),並將數組的長度減1,若是數組爲空(或者不是數組)將返回NULL。其函數的原型以下:htm
mixed array_pop(array &array)
該函數只有一個參數,即做爲棧的數據。返回彈出的數組中最後一個元素的值。函數array_pop()使用的代碼以下所示:
1
2
3
4
5
6
7
|
<?php
//聲明一個數組做爲棧
$lamp
=
array
(
"Linux"
,
"Apache"
,
"MySQL"
,
"PHP"
);
array_pop
(
$lamp
);
print_r(
$lamp
)
//輸出 array([0]=>Linux [1]=>Apache [2]=>MySQL)
?>
|
2、使用數組實現隊列
PHP中的數組處理函數還可使用數組實現隊列的操做。堆棧是「後進先出」原則,而一個隊列則容許在一端插入數據,在另外一端刪除數據,也就是實現最早進入隊列的數據最早退出隊列,就像銀行的排號機,最早排好的號最早辦理業務。即隊列是「先進先出」的原則。
使用array_push()和array_pop()函數都是從數組的最後添加數據和刪除數據,若是使用array_push()函數在數組的最後添加數據,而將數組中第一個元素刪除就能夠實現一個隊列。
③函數array_shift()
函數array_shift()能夠實現刪除數組中的第一個元素,並返回被刪除元素的值。其函數的原型以下:
mixed array_shift(array &array)
該函數和array_pop()函數同樣,都是隻有一個必選參數,其參數爲實現隊列的數組。將數組中第一個單元移出並做爲結果返回,將數組的長度減1,還將全部其餘元素向前移動一位。全部的數字鍵名將改成從0開始計數,字符串鍵名將保持不變。若是數組爲空(或者不是數組),則返回NULL。函數array_shift()使用的代碼以下所示:
1
2
3
4
5
6
7
8
9
10
|
<?php
//帶有字符串鍵值的關聯數組
$lamp
=
array
(
"a"
=>
"Linux"
,
"b"
=>
"Apache"
,
"c"
=>
"MySQL"
,
"d"
=>
"PHP"
);
array_shift
(
$lamp
);
print_r(
$lamp
);
//輸出:Array([b]=>Apache [c]=>MySQL [d]=>PHP)
$lamp
=
array
(
"Linux"
,
"Apache"
,
"MySQL"
,
"PHP"
);
array_shift
(
$lamp
);
print_r(
$lamp
);
//數字下標從新索引Array([0]=>Apache [1]=>MySQL [2]=>PHP)
?>
|
④函數array_unshift()
在PHP中海可使用array_unshift()函數在隊列數組的開頭插入一個或多個元素,該函數執行成功將返回插入元素個數,使用格式和函數array_push()是同樣的。經過前面介紹的這4個函數從而實現了從數組的任意一端添加和刪除數據。