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

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

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

作成日: 更新日:

基本的な使い方

shiftメソッドは、PHPのSplDoublyLinkedListクラスに属し、リストの最も先頭にある要素を取り出す役割を実行するメソッドです。

このメソッドが呼び出されると、SplDoublyLinkedListオブジェクトの先頭に位置する要素がリストから削除され、その削除された要素の値が戻り値として返されます。この操作により、SplDoublyLinkedListが保持する要素の総数は一つ減少します。

SplDoublyLinkedListは、両端から要素を効率的に追加したり削除したりできるデータ構造であり、特にキュー(FIFO: 先入れ先出し)として要素を処理する場合に非常に有用です。shiftメソッドは、このキューの先頭から要素を取り出す操作を実現するために使用されます。

重要な注意点として、もしリストが空の状態でshiftメソッドを呼び出すと、UnderflowExceptionという実行時例外が発生します。そのため、shiftメソッドを使用する際には、事前にisEmpty()メソッドなどを用いてリストが空でないことを確認することが強く推奨されます。

このメソッドは、データをキューのように処理し、先頭から順に要素を取り出して処理を進めるようなシステムやアプリケーション、例えばタスクキューの実装などで頻繁に利用されます。

構文(syntax)

1<?php
2$list = new SplDoublyLinkedList();
3$list->push("first element");
4$list->push("second element");
5$removedElement = $list->shift();
6?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

mixed

SplDoublyLinkedList の先頭から要素を削除し、その削除された要素を返します。

サンプルコード

PHP SplDoublyLinkedList::shift によるShift_JIS変換

1<?php
2
3/**
4 * SplDoublyLinkedListのshiftメソッドを使用して、リストの先頭から要素を取り出し、
5 * その文字列をShift_JISに変換して表示するサンプルコードです。
6 *
7 * SplDoublyLinkedList::shift() は、リストの先頭から要素を取り除き、その要素を返します。
8 * キーワード「php shift jis」に関連付けるため、取り出した文字列をShift_JISに変換しています。
9 * このコードは、UTF-8の文字列をリストに追加し、取り出した後にShift_JISに変換するプロセスを示します。
10 *
11 * @return void
12 */
13function demonstrateSplDoublyLinkedListShiftWithShiftJIS(): void
14{
15    // SplDoublyLinkedListの新しいインスタンスを作成します。
16    // このリストは、両端から要素の追加・削除が効率的に行えます。
17    $list = new SplDoublyLinkedList();
18
19    // リストに複数の日本語UTF-8文字列を追加します。
20    echo "--- リストにUTF-8文字列を追加します ---\n";
21    $list->push("こんにちは、PHPの世界へ!");
22    $list->push("システムエンジニアを目指す初心者向け");
23    $list->push("SplDoublyLinkedList::shiftのデモ");
24    $list->push("日本語とShift_JISエンコーディング");
25    echo "現在のリストの要素数: " . $list->count() . "個\n\n";
26
27    // リストが空になるまで、先頭から要素を取り出し(shift)、Shift_JISに変換して表示します。
28    echo "--- リストから要素をshiftし、Shift_JISに変換して表示します ---\n";
29    $itemNumber = 1;
30    while (!$list->isEmpty()) {
31        // shift() メソッドを呼び出し、リストの先頭から要素を取り出します。
32        // 取り出された要素はリストから削除されます。
33        $originalString = $list->shift();
34
35        // 取り出したUTF-8文字列をShift_JISに変換します。
36        // mb_convert_encoding() は、文字エンコーディングの変換を行う関数です。
37        // 'SJIS' は Shift_JIS エンコーディングを示します。
38        // 'UTF-8' は元の文字列のエンコーディングを示します。
39        $shiftJISString = mb_convert_encoding($originalString, 'SJIS', 'UTF-8');
40
41        echo "要素 #" . $itemNumber++ . ":\n";
42        echo "  - 元の文字列 (UTF-8): " . $originalString . "\n";
43        echo "  - Shift_JIS変換後  : " . $shiftJISString . "\n\n";
44    }
45
46    echo "--- 全ての要素がリストからshiftされました ---\n";
47    echo "現在のリストの要素数: " . $list->count() . "個\n";
48}
49
50// 関数を実行して、デモンストレーションを開始します。
51demonstrateSplDoublyLinkedListShiftWithShiftJIS();

このサンプルコードは、PHP 8で利用できるSplDoublyLinkedListクラスのshiftメソッドの基本的な使い方と、キーワード「php shift jis」に関連する文字エンコーディング変換の例を示すものです。SplDoublyLinkedListは、リストの両端から要素の追加(push/unshift)や削除(pop/shift)を効率的に行えるデータ構造を提供します。

shiftメソッドは、リストの先頭から要素を一つ取り出し、その要素を返します。このメソッドに引数はなく、呼び出すだけでリストの先頭要素を操作できます。取り出された要素はリストから削除されます。戻り値の型はmixedとされており、リストに格納されたあらゆる型のデータがそのまま返されることを意味します。

コードではまず、いくつかのUTF-8日本語文字列をSplDoublyLinkedListに追加しています。その後、リストが空になるまでwhileループ内でshiftメソッドを繰り返し呼び出し、先頭から順に要素を取り出しています。取り出した各文字列は、mb_convert_encoding関数を使用して元のUTF-8エンコーディングからShift_JISエンコーディングに変換され、その結果とともに表示されます。これにより、リスト操作と実用的な文字コード変換のプロセスを同時に理解することができます。

shift()メソッドは、リストの先頭要素を削除しつつ取り出す破壊的な操作です。空のリストで呼び出すとUnderflowExceptionが発生するため、isEmpty()で事前に確認することが必須です。戻り値はmixed型なので、取得した要素の型を意識して後続処理に利用してください。文字列エンコーディング変換のmb_convert_encoding()関数では、元の文字列と変換先のエンコーディングを正確に指定しないと文字化けの原因となります。UTF-8やShift_JISなど、日本語文字コードの基礎知識習得が重要です。

PHP: SplDoublyLinkedList::shiftでShift_JISをUTF-8に変換する

1<?php
2
3/**
4 * Shift_JISエンコードされた文字列を格納するキューから、
5 * SplDoublyLinkedList::shift メソッドを使用して要素を順に取り出し、
6 * UTF-8に文字コード変換するサンプルコードです。
7 *
8 * @return void
9 */
10function processShiftJisToUtf8ConversionQueue(): void
11{
12    // SplDoublyLinkedList を初期化し、変換対象の文字列を保持するキューとして利用します。
13    $stringQueue = new SplDoublyLinkedList();
14
15    // PHPスクリプトは通常UTF-8で記述されます。
16    // そのため、意図的にShift_JISエンコードのバイト列を作成し、リストに追加します。
17    $shiftJisString1 = mb_convert_encoding('こんにちは、世界', 'Shift_JIS', 'UTF-8');
18    $shiftJisString2 = mb_convert_encoding('PHPプログラミングは楽しい', 'Shift_JIS', 'UTF-8');
19    $shiftJisString3 = mb_convert_encoding('文字コードの勉強', 'Shift_JIS', 'UTF-8');
20
21    // キューにShift_JISエンコードの文字列を追加します。
22    $stringQueue->push($shiftJisString1);
23    $stringQueue->push($shiftJisString2);
24    $stringQueue->push($shiftJisString3);
25
26    echo "--- Shift_JIS から UTF-8 への変換処理を開始します ---\n";
27
28    // キューが空になるまでループし、先頭から要素を取り出して変換します。
29    while (!$stringQueue->isEmpty()) {
30        // SplDoublyLinkedList::shift() は、リストの先頭から要素を削除し、その要素を返します。
31        // これにより、キューの先頭の要素が取り出されます。
32        $currentShiftJisString = $stringQueue->shift();
33
34        // mb_convert_encoding 関数を使用して、Shift_JISからUTF-8へ文字コードを変換します。
35        $convertedUtf8String = mb_convert_encoding($currentShiftJisString, 'UTF-8', 'Shift_JIS');
36
37        // 変換結果を表示します。
38        // 元のShift_JISバイト列も、表示のために一時的にUTF-8に変換して表示しています。
39        echo "変換元 (Shift_JIS): " . mb_convert_encoding($currentShiftJisString, 'UTF-8', 'Shift_JIS')
40             . " => 変換後 (UTF-8): " . $convertedUtf8String . "\n";
41    }
42
43    echo "--- 変換処理が完了しました ---\n";
44
45    // キューが空になったことを確認します。
46    if ($stringQueue->isEmpty()) {
47        echo "キューは空になりました。\n";
48    }
49}
50
51// 関数を実行します。
52processShiftJisToUtf8ConversionQueue();
53

PHPのSplDoublyLinkedListは、要素を両端から追加したり削除したりできる、柔軟なデータ構造を提供するクラスです。特に、要素を先入れ先出し(FIFO)で処理する「キュー」として利用する際などに便利です。

SplDoublyLinkedList::shiftメソッドは、このリストの「先頭」から要素を一つ取り除き、その取り除いた要素を戻り値として返します。このメソッドに引数は必要ありません。戻り値の型はmixedで、リストに格納されていたあらゆる型の値が返される可能性があります。この動作により、キューの先頭にある要素を順次取り出して処理を進めることができます。

このサンプルコードでは、Shift_JISエンコードされた文字列を格納するキューとしてSplDoublyLinkedListを使用しています。shiftメソッドは、キューの先頭にあるShift_JIS文字列を一つずつ取り出すために利用されており、取り出された文字列はmb_convert_encoding関数を使ってUTF-8へ文字コード変換されます。whileループの中でshiftメソッドを繰り返し呼び出すことで、キューのすべての要素を順番に処理し、最終的にキューが空になるまで操作を続ける様子が示されています。このように、shiftメソッドはリストの要素を順番に消費していく際に非常に役立ちます。

SplDoublyLinkedList::shiftメソッドは、リストの先頭から要素を削除しながら取り出すため、一度取り出した要素は元のリストからはなくなります。リストが空の状態でshiftを呼び出すとエラーが発生するため、isEmpty()でリストが空でないことを確認してから利用することが重要です。文字コード変換を行うmb_convert_encoding関数では、「変換したい文字列、変換後のエンコーディング、変換元のエンコーディング」という引数順序を正確に指定してください。特に変換元のエンコーディングを間違えると、意図しない文字化けの原因となります。実際のシステムでは、入力されるデータの文字コードを正しく判断し、適切に変換処理を行う必要があります。

関連コンテンツ