PHP Conference Japan 2024

ArrayIterator::seek

(PHP 5, PHP 7, PHP 8)

ArrayIterator::seek將指標移至指定位置

說明

public ArrayIterator::seek(int $offset): void

將迭代器指標移至指定位置。

參數

offset

要移動到的位置。

傳回值

沒有傳回值。

錯誤/例外

如果 offset 不可搜尋,則擲出 OutOfBoundsException

新增註解

使用者貢獻的註解 2 個註解

6
jon at ngsthings dot com
16 年前
<?php
// 沒有看到任何程式碼範例...這裡有一個我正在開發的應用程式範例

$array = array('1' => 'one',
'2' => 'two',
'3' => 'three');

$arrayobject = new ArrayObject($array);
$iterator = $arrayobject->getIterator();

if(
$iterator->valid()){
$iterator->seek(1); // 預期:two,輸出:two
echo $iterator->current(); // two
}

?>
4
foalford at gmail dot com
8 年前
<?php
// seek 會改變迭代器的內部索引,而不是 key() 傳回的值。
// 如果與 uasort/natsort 函數合併使用,這是一個很大的陷阱。

$a = new ArrayObject([4,3,2,1]);
$it = $a->getIterator();
$it->natsort(); // 迭代器會在排序陣列時保留鍵值
$it->rewind();
$first = $it->key(); // 第一個元素是 1,它的鍵值是 3
echo $first. PHP_EOL; // 3

$it->next();
$second = $it->key();
echo
$second. PHP_EOL; //2

$it->next();
$it->seek($first); // 原本打算搜尋到元素 1,鍵值 3,索引 0
echo $it->key() . PHP_EOL; // 最後變成 0,因為 seek 將參數當成索引而不是鍵值。它搜尋到索引 3 的元素,元素 4,鍵值 0。

var_dump($it);

/* 輸出:
3
2
0
object(ArrayIterator)#2 (1) {
["storage":"ArrayIterator":private]=>
object(ArrayObject)#1 (1) {
["storage":"ArrayObject":private]=>
array(4) {
[3]=>
int(1)
[2]=>
int(2)
[1]=>
int(3)
[0]=>
int(4)
}
}
}
*/
To Top