Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】SplDoublyLinkedList::rewind()メソッドの使い方

rewindメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

rewindメソッドは、SplDoublyLinkedListクラスのインスタンスが保持する要素の内部ポインタを、リストの先頭、すなわち最初の要素の位置に移動させるメソッドです。

SplDoublyLinkedListは、データを順番に並べて格納するリストの一種で、要素をリストの両端から効率的に追加したり削除したりできる、非常に柔軟なデータ構造です。このリストに格納された要素を一つずつ順番に読み出していく際には、現在どの要素を見ているかを示す「内部ポインタ」というものが使われます。

このrewindメソッドは、特にリストの要素を最初から順番に繰り返し処理したい場合に利用されます。例えば、一度リストのすべての要素を処理し終えた後や、途中でリストの要素の読み出しを中断して、再度リストの最初から処理を開始したい場合に、このrewindメソッドを呼び出すことで、内部ポインタをリセットし、改めてリストの最初の要素にアクセスできる状態に戻すことができます。

PHPのSplDoublyLinkedListクラスは、Iteratorというインターフェースを実装しているため、foreachループのような構文を使ってリストの要素を簡単に反復処理できます。foreachループが開始される際にも、このrewindメソッドは内部的に呼び出され、リストの処理が常に先頭から始まるように保証しています。開発者が明示的にリストの走査位置をリセットしたい場合にも直接呼び出すことができ、リストデータの反復処理を制御する上で非常に重要な役割を果たします。

構文(syntax)

1<?php
2$list = new SplDoublyLinkedList();
3$list->rewind();

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP SplDoublyLinkedList の rewind で複数回イテレーションする

1<?php
2
3// SplDoublyLinkedList を使用して、イテレータを巻き戻し可能なデータ構造の例を示します。
4// PHPの標準ジェネレータは一度しかイテレーションできませんが、
5// SplDoublyLinkedList は `rewind()` メソッドにより複数回イテレーションが可能です。
6
7// SplDoublyLinkedList のインスタンスを作成します。
8$list = new SplDoublyLinkedList();
9
10// リストに要素を追加します。
11$list->push('項目1');
12$list->push('項目2');
13$list->push('項目3');
14$list->push('項目4');
15
16echo "--- 1回目のイテレーション ---\n";
17// 最初のイテレーションを実行し、リストの要素を表示します。
18foreach ($list as $item) {
19    echo $item . "\n";
20}
21
22// `rewind()` メソッドを呼び出し、イテレータをリストの先頭に戻します。
23// これにより、リストを最初から再度辿ることができるようになります。
24$list->rewind();
25
26echo "\n--- 2回目のイテレーション (rewind後) ---\n";
27// `rewind()` 後に再度イテレーションを実行し、要素を表示します。
28// これにより、リストが巻き戻され、複数回イテレーションできることを確認できます。
29foreach ($list as $item) {
30    echo $item . "\n";
31}
32

PHPのSplDoublyLinkedListは、要素を前からも後ろからも効率的に追加・削除できるデータ構造です。このクラスが提供するrewind()メソッドは、リストを繰り返し処理する「イテレータ」の位置をリストの「先頭」に戻す役割を持っています。

一般的なPHPのジェネレータは一度しかイテレーション(繰り返し処理)を行えませんが、SplDoublyLinkedListではrewind()メソッドを呼び出すことで、イテレータを最初の位置にリセットし、複数回にわたってリストの要素を最初から辿り直すことが可能になります。

サンプルコードでは、まずリストに「項目1」から「項目4」までを追加し、1回目のイテレーションでそれらの要素を表示します。その後、$list->rewind();と呼び出すことで、リストを辿るための内部的なポインタが先頭に戻されます。これにより、2回目のイテレーションでは、再びリストの「項目1」から順に処理できることを示しています。

rewind()メソッドは引数を一切必要とせず、また戻り値もありません。ただ内部的にイテレータの状態を操作し、次回のイテレーションがリストの先頭から始まるように設定するシンプルな機能を提供しています。これにより、同じデータセットを複数回利用する必要がある場合に非常に便利です。

このサンプルコードでは、SplDoublyLinkedListrewind()メソッドを使って、イテレータをリストの先頭に戻す方法を示しています。特に初心者が注意すべき点は、一度foreachでリストを最後まで処理した後、再度リストの最初から処理したい場合には、必ずrewind()を呼び出す必要があることです。これを忘れると、イテレータが既にリストの末尾に位置しているため、次のforeachループでは何も処理されず、期待通りの結果が得られません。

また、rewind()はリスト内のデータを変更するわけではなく、あくまでイテレーションの「現在位置」を先頭に戻す機能であると理解してください。PHPの標準的なジェネレータは一度しかイテレーションできませんが、SplDoublyLinkedListrewind()を用いることで、同じデータセットを複数回、繰り返し処理できる点が大きな特徴です。この特性を活かし、同じデータを何度も参照する必要がある場面で安全かつ効果的に利用できます。

関連コンテンツ