SplDoublyLinkedList::valid

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

SplDoublyLinkedList::valid检查双向链表是否包含更多节点

描述

public SplDoublyLinkedList::valid(): bool

检查双向链表是否包含更多节点。

参数

此函数没有参数。

返回值

如果双向链表包含更多节点,则返回 true,否则返回 false

添加备注

用户贡献的备注 2 条备注

1
phpdude at zootal dot com
6 年前
文档说“检查双向链表是否包含更多节点”。我不认为这是正确的。

示例

$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

请注意,当我们位于列表的最后一个节点(value = 5)时,valid() 函数返回 true。但我们位于列表的最后一个节点,并且没有更多节点。如果 valid() 函数检查列表中是否有更多节点,它将返回 false,而不是 true。

如果您查看 Iterator::valid 的文档,它们说“检查当前位置是否有效”。我相信这实际上是 valid() 的作用,它检查*当前*位置是否有效,*而不是*是否有更多节点。

注意这一点,否则它会咬你。你可以轻松地迭代到列表的末尾,运行 valid(),认为还有一个节点,执行 next(),获取值,然后你得到 null 而不是列表的最后一个节点。
0
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