PHP Conference Japan 2024

SplDoublyLinkedList::valid

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

SplDoublyLinkedList::valid檢查雙向鏈結串列是否包含更多節點

說明

public SplDoublyLinkedList::valid(): bool

檢查雙向鏈結串列是否包含更多節點。

參數

此函式沒有參數。

回傳值

如果雙向鏈結串列包含更多節點,則回傳 true,否則回傳 false

新增註解

使用者貢獻的筆記 2 則筆記

phpdude at zootal dot com
7 年前
文件說明「檢查雙向鏈結串列是否包含更多節點」。我不認為這是正確的。

範例

$dlist = new SplDoublyLinkedList;
$data=[1,2,3,4,5];

foreach($data as $d)
$dlist->push($d);
$dlist->rewind();

for($i=0;$i<6;$i++)
{
$currentValue = $dlist->current();
$currentValid = $dlist->valid();

$status = $currentValid ? 'True' : 'False';
echo '目前的值是:' . $currentValue . ' 有效狀態是:' . $status . "\n";

$dlist->next();
}

輸出

目前的值是:1 有效狀態是:True
目前的值是:2 有效狀態是:True
目前的值是:3 有效狀態是:True
目前的值是:4 有效狀態是:True
目前的值是:5 有效狀態是:True
目前的值是: 有效狀態是:False

請注意,當我們位於串列的最後一個節點,值為 5 時,valid() 函式會返回 true。然而,我們已經位於串列的最後一個節點,沒有更多節點了。如果 valid() 函式正在檢查串列上是否還有更多節點,它應該返回 false,而不是 true。

如果您查看 Iterator::valid 的文件,它會說明「檢查目前位置是否有效」。我相信 valid() 的作用確實如此,它會檢查*目前*位置是否有效,*而不是*檢查是否還有更多節點。

請注意這一點,否則它會造成問題。您可能會很順利地迭代到串列的末尾,執行 valid(),認為還有一個節點,執行 next(),擷取值,結果卻得到 null 而不是串列的最後一個節點。
lincoln dot du dot j at gmail dot com
7 年前
$a = new SplDoublyLinkedList;
$arr=[1,2,3,4,5,6,7,8,9];

for($i=0;$i<count($arr);$i++){
$a->add($i,$arr[$i]);
}

$a->rewind();

while($a->valid()){
echo '鍵 ', $a->key(), ' 值 ', $a->current(),"\n";
$a->next();
}
To Top