SplDoublyLinkedList類提供了雙向鏈表的主要功能。
方法
add — 在指定的索引處添加/插入新值
bottom — 從雙向鏈表的開始處查看節(jié)點(diǎn)
__construct — 構(gòu)造一個(gè)新的雙向鏈表
count — 計(jì)算雙向鏈表中元素的數(shù)量。
current — 返回當(dāng)前數(shù)組條目
getIteratorMode — 返回迭代的模式
isEmpty — 檢查雙向鏈表是否為空。
key — 返回當(dāng)前節(jié)點(diǎn)的索引
next — 移動(dòng)到下一個(gè)條目
offsetExists — 返回請(qǐng)求的$index是否存在
offsetGet — 返回指定$index的值
offsetSet — 將指定$ index的值設(shè)置為$newval
offsetUnset — 取消設(shè)置指定$index的值
pop — 從雙向鏈表的末尾處彈出節(jié)點(diǎn)
prev — 移動(dòng)到上一個(gè)條目
push — 在雙向鏈表的末尾推一個(gè)元素
rewind — 回滾迭代器回到開始
serialize — 序列化存儲(chǔ)
setIteratorMode — 設(shè)置迭代的模式
shift — 從雙向鏈表的末尾窺探節(jié)點(diǎn)
top — 從雙向鏈表的末尾查看節(jié)點(diǎn)
unserialize — 反序列化存儲(chǔ)
unshift —在元素前面添加雙向鏈表
valid — 檢查雙向鏈表是否包含更多的節(jié)點(diǎn)
示例1
<?php
$list = new SplDoublyLinkedList();
//從尾部壓入4個(gè)元素
$list->push('A');
$list->push('C');
$list->push('C');
$list->push('D');
//先進(jìn)先出
echo "FIFO (First In First Out) :" . PHP_EOL;
$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
for ($list->rewind(); $list->valid(); $list->next()) {
echo $list->current() . "\n";
}
//LIFO (先進(jìn)后出)
echo "LIFO (Last In First Out) :" . PHP_EOL;
$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);
for ($list->rewind(); $list->valid(); $list->next()) {
echo $list->current() . "\n";
}
執(zhí)行結(jié)果如圖:

Paste_Image.png
示例2
<?php
$dlist = new SplDoublyLinkedList();
//在列表的末尾插入數(shù)據(jù)
$dlist->push('c++');
$dlist->push('java');
$dlist->push('go');
//unshift會(huì)在列表頂部插入數(shù)據(jù)
$dlist->unshift("1 jsp");
$dlist->unshift("2 php");
$dlist->unshift("3 asp");
/*
列表數(shù)據(jù):
3 asp
2 php
1 jsp
c++
java
go
*/
//--------------------------------------
//pop從列表的尾部刪除一個(gè)元素
$dlist->pop();
/*
列表數(shù)據(jù):
3 asp
2 php
1 jsp
c++
java
*/
//--------------------------------------
//shift()從列表頂部刪除一個(gè)項(xiàng)目,
$dlist->shift();
/*
列表數(shù)據(jù):
2 php
1 jsp
c++
java
*/
//--------------------------------------
//add的方法替換特定索引處的值,如果要替換不存在的項(xiàng),將拋出異常
$dlist->add(3, "C#");
/*
列表數(shù)據(jù):
2 php
1 jsp
c++
C#
java
*/
//--------------------------------------
//rewind()方法根據(jù)迭代器指向列表的首字母
//valid()方法檢查列表是否有效
//next()指向列表中的下一個(gè)數(shù)據(jù)。
for ($dlist->rewind(); $dlist->valid(); $dlist->next()) {
echo $dlist->current() . PHP_EOL;
}
echo PHP_EOL;
/*
列表數(shù)據(jù):
2 php
1 jsp
c++
C#
java
*/
//默認(rèn)先進(jìn)先出,我們將遍歷模式改為先進(jìn)后出
$dlist->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);
for ($dlist->rewind(); $dlist->valid(); $dlist->next()) {
echo $dlist->current() . PHP_EOL;
}
/*
列表數(shù)據(jù):
java
C#
c++
1 jsp
2 php
*/