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

【PHP8.x】array_shift()関数の使い方

array_shift関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

array_shift関数は、配列の先頭の要素を取り除き、その要素を返します。この関数は、配列の要素数を減らし、すべての数値キーをゼロから始まるように再インデックスします。元の配列が空の場合、NULLを返します。配列が連想配列の場合、キーは保持されます。

array_shift関数は、配列をキューとして扱う場合に便利です。キューは、最初に追加された要素が最初に取り除かれるというFIFO(First-In, First-Out)の原則に従います。array_shift関数を使用することで、配列から要素を順番に取り出し、処理することができます。

この関数は、元の配列を直接変更するため、注意が必要です。特に、複数の場所で同じ配列を参照している場合は、予期しない結果を引き起こす可能性があります。配列のコピーを作成してからarray_shift関数を使用するか、他の配列操作関数(例えば、array_slice)を使用することを検討してください。

array_shift関数は、引数として配列を1つ受け取ります。この配列は参照渡しされるため、関数内で変更されると、元の配列にも反映されます。返り値は、取り除かれた要素の値です。元の配列が空の場合はNULLを返します。エラーが発生した場合(例えば、引数が配列でない場合)は、E_WARNINGレベルのエラーが発生します。

array_shift関数は、配列の先頭要素を効率的に削除し、配列のキーを再編成する必要がある場合に役立つ関数です。ただし、元の配列が変更されるため、使用する際には十分な注意が必要です。

構文(syntax)

1array_shift(array &$array): mixed

引数(parameters)

array &$array

  • array &$array: 操作対象の配列。この配列は参照渡しされ、関数実行後に先頭の要素が削除されます。

戻り値(return)

mixed

配列の先頭から要素を1つ取り出し、その要素の値を返します。配列は先頭の要素が削除された状態で更新されます。

サンプルコード

PHP array_shift 連想配列から要素を削除する

1<?php
2
3/**
4 * array_shift関数の基本的な使い方を示すサンプルコードです。
5 * 連想配列に対してarray_shiftを適用した場合の挙動を特に示します。
6 */
7
8// サンプルとして連想配列を定義します。
9$associativeArray = [
10    'id' => 101,
11    'name' => '田中',
12    'role' => '管理者',
13    'status' => '有効',
14];
15
16echo "--- 元の連想配列 ---\n";
17print_r($associativeArray);
18
19// array_shift関数を適用し、配列の先頭要素を取り出します。
20// 連想配列の場合、先頭要素の値が返され、元の配列からはそのキーと値のペアが削除されます。
21// 残りの要素は数値キーにリセットされ、連番になります。
22$shiftedValue = array_shift($associativeArray);
23
24echo "\n--- array_shiftで取り出された値 ---\n";
25// 取り出された値は'id'キーに対応する'101'です。
26var_dump($shiftedValue);
27
28echo "\n--- array_shift後の連想配列 ---\n";
29// 'id' => 101 が削除され、残りの要素のキーが数値にリセットされている点に注目してください。
30print_r($associativeArray);
31
32?>

PHP 8.4のarray_shift関数は、配列の先頭にある要素を取り除くために使用されます。この関数は、引数として渡された配列そのものを変更する点が特徴です。引数array &$arrayは、操作対象となる配列を「参照渡し」で受け取ります。これにより、関数内で配列が変更されると、その変更が元の配列にも直接反映されます。関数が正常に実行されると、削除された先頭要素の値が戻り値mixedとして返されます。

提供されたサンプルコードでは、連想配列$associativeArrayに対してarray_shiftを適用する例を示しています。array_shift($associativeArray)を実行すると、連想配列の先頭に位置する'id' => 101というキーと値のペアが配列から削除され、その値である101$shiftedValue変数に代入されます。

特に注目すべきは、array_shift適用後の配列の挙動です。元の配列から先頭要素が削除された後、残りの要素(この場合は'name' => '田中''role' => '管理者''status' => '有効')は、元の連想キーを失います。そして、自動的に012といった数値の連番キーを持つ配列として再インデックスされます。このように、array_shiftは連想配列の構造を数値キーの配列に変換する可能性があるため、使用する際は注意が必要です。この関数は、配列の先頭から要素を効率的に取得し、同時に配列からその要素を削除したい場合に非常に役立ちます。

array_shift関数は、引数として渡された配列の先頭要素を削除し、その値を返します。この際、元の配列自体が変更される(破壊的である)点に注意が必要です。特に連想配列に対して使用すると、削除されたキーに対応する値のみが返され、元の配列に残った要素のキーは、連想キーを失って0から始まる数値キーにリセットされます。これにより、連想配列のキーが持つ意味が失われる可能性があるため、意図しないデータ構造の変更に注意してください。また、配列が空の状態でarray_shiftを呼び出すとnullが返されますので、使用前に配列が空でないか確認することをお勧めします。

PHP array_shiftで先頭要素を取り出す

1<?php
2
3declare(strict_types=1);
4
5/**
6 * array_shift関数の使用例を示す関数。
7 * 配列の先頭から要素を取り除き、その要素を返します。
8 * 元の配列は変更されます(参照渡し)。
9 *
10 * @param array $data 操作対象の配列(参照渡し)。
11 * @return mixed 取り除かれた要素。配列が空の場合はnullを返します。
12 */
13function demonstrateArrayShiftUsage(array &$data): mixed
14{
15    echo "--- array_shift の使用例 ---" . PHP_EOL;
16    echo "初期配列: [" . implode(', ', $data) . "]" . PHP_EOL;
17
18    // array_shiftは配列の先頭要素を取り除き、その値を返す
19    $shiftedElement = array_shift($data);
20
21    if ($shiftedElement !== null) {
22        echo "取り除かれた要素: " . $shiftedElement . PHP_EOL;
23    } else {
24        echo "配列が空のため、要素は取り除かれませんでした。" . PHP_EOL;
25    }
26
27    // array_shiftが元の配列を変更したことを示す
28    echo "array_shift後の配列: [" . implode(', ', $data) . "]" . PHP_EOL;
29    echo PHP_EOL;
30
31    return $shiftedElement;
32}
33
34// サンプル実行
35$colors = ['red', 'green', 'blue', 'yellow'];
36echo "関数呼び出し前の配列: [" . implode(', ', $colors) . "]" . PHP_EOL;
37demonstrateArrayShiftUsage($colors);
38// 関数呼び出し後、$colors配列はarray_shiftによって変更されている
39echo "関数呼び出し後の配列: [" . implode(', ', $colors) . "]" . PHP_EOL;
40echo PHP_EOL;
41
42// 空の配列に対する挙動の確認
43$emptyArray = [];
44echo "関数呼び出し前の空配列: [" . implode(', ', $emptyArray) . "]" . PHP_EOL;
45demonstrateArrayShiftUsage($emptyArray);
46echo "関数呼び出し後の空配列: [" . implode(', ', $emptyArray) . "]" . PHP_EOL;

PHP 8で利用できるarray_shift関数は、配列の先頭から要素を取り除くための組み込み関数です。この関数は、引数として渡された配列の先頭の要素を一つ取り除き、その値だけを返します。

引数&$arrayは参照渡しであるため、array_shift関数が呼び出されると、元の配列自体が変更されます。具体的には、先頭の要素が取り除かれ、残りの要素が一つずつ前に詰められるため、配列の要素数が減少します。

戻り値は取り除かれた要素の値となりますが、もし配列が空の場合にはnullが返されます。サンプルコードでは、初期配列['red', 'green', 'blue', 'yellow']からarray_shiftを適用すると、redが取り除かれた要素として返され、元の配列は['green', 'blue', 'yellow']に変化します。また、空の配列に対してarray_shiftを適用した場合は、nullが返され、配列は空のまま変化しないことが示されています。この関数は、配列をキューのように扱い、先入れ先出しの操作を行う際に便利です。

array_shift関数は、引数として渡された元の配列の先頭要素を直接削除し、配列自体を変更します。この「参照渡し」の挙動は特に注意すべき点です。関数は削除された要素を返しますが、操作対象の配列が空の場合にはnullが返されますので、戻り値の確認を必ず行ってください。要素が削除されると、残りの数値添字のキーは自動的に0から振り直されます。配列の最後の要素を取り除きたい場合は、array_pop関数など別の関数をご検討ください。

PHP array_shift: 数値キーと連想キーの挙動

1<?php
2
3/**
4 * array_shift 関数の動作を数値キーと連想キーの配列でデモンストレーションします。
5 *
6 * array_shift は、配列の先頭の要素を取り除き、その値を返します。
7 * この関数は、引数として渡された配列自体を変更します(参照渡し)。
8 *
9 * キーの扱いに注目:
10 * - 数値キーの配列の場合: 残りの要素のキーは、0から始まるように「再インデックス」されます。
11 *   これは、元の数値キーが「保持(preserve)」されないことを意味します。
12 * - 連想キーの配列の場合: 残りの要素の連想キーは「保持(preserve)」されます。
13 *   連想キーは変更されずにそのまま残ります。
14 *
15 * このサンプルコードは、上記のキーの挙動の違いを明確に示します。
16 */
17function demonstrateArrayShiftKeyPreservation(): void
18{
19    echo "--- 数値キーの配列での array_shift の動作 ---" . PHP_EOL;
20    // 数値キーの配列を準備
21    $numericArray = [10, 20, 30, 40];
22    echo "初期配列 (数値キー): " . print_r($numericArray, true);
23
24    // array_shift を適用し、先頭要素を取り除く
25    $shiftedValueNumeric = array_shift($numericArray);
26
27    echo "取り除かれた値: " . $shiftedValueNumeric . PHP_EOL;
28    // 残りの配列を表示。数値キーは0から再インデックスされていることに注目
29    echo "array_shift 適用後の配列 (数値キー): " . print_r($numericArray, true);
30    echo "※ 数値キーは再インデックスされ、元のキーは保持(preserve)されません。" . PHP_EOL . PHP_EOL;
31
32
33    echo "--- 連想キーの配列での array_shift の動作 ---" . PHP_EOL;
34    // 連想キーの配列を準備
35    $associativeArray = ['apple' => 100, 'banana' => 200, 'cherry' => 300];
36    echo "初期配列 (連想キー): " . print_r($associativeArray, true);
37
38    // array_shift を適用し、先頭要素を取り除く
39    $shiftedValueAssociative = array_shift($associativeArray);
40
41    echo "取り除かれた値: " . $shiftedValueAssociative . PHP_EOL;
42    // 残りの配列を表示。連想キーはそのまま保持されていることに注目
43    echo "array_shift 適用後の配列 (連想キー): " . print_r($associativeArray, true);
44    echo "※ 連想キーは保持(preserve)され、変更されません。" . PHP_EOL . PHP_EOL;
45}
46
47// 関数を実行して、array_shift の動作を確認します。
48demonstrateArrayShiftKeyPreservation();
49

PHPのarray_shift関数は、配列の先頭から要素を一つ取り除くための機能です。この関数は、引数array &$arrayが示すように、渡された配列自体を参照渡しで変更し、取り除かれた要素の値をmixed型で戻り値として返します。

この関数の特徴は、残りの配列のキーの扱いにあります。数値キーの配列にarray_shiftを適用すると、先頭の要素が取り除かれた後、残りのすべての要素のキーは0から始まるように「再インデックス」されます。これにより、元の数値キーは保持されません。

一方で、連想キー(文字列キー)の配列の場合、先頭の要素が取り除かれた後も、残りの要素の連想キーは変更されずにそのまま「保持」されます。連想キーは再インデックスされません。

このサンプルコードは、数値キーと連想キーの配列それぞれでarray_shift関数を使った際の、キーの挙動の違いを具体的に示しています。これにより、array_shift利用時のキーの挙動を正しく理解し、意図しないデータの変化を防ぐことができます。

array_shift関数は、引数で渡された元の配列自体を変更します。新しい配列を返すわけではないため、元の配列データが失われることに注意が必要です。特に、配列のキーの扱いは、数値キーと連想キーで挙動が異なります。

数値キーの配列の場合、先頭の要素が削除されると、残りの要素のキーは0から始まる連番に「再インデックス」されます。元の数値キーは保持されません。

一方、連想キーの配列の場合、先頭の要素が削除されても、残りの要素の連想キーは変更されずに「保持」されます。このキーの挙動の違いを理解することは、予期せぬデータの不整合を防ぐ上で非常に重要です。また、空の配列にarray_shiftを適用するとnullが返されますので、戻り値の確認も推奨いたします。

PHP: array_shiftで連想配列の先頭要素を取り出す

1<?php
2
3/**
4 * array_shift() 関数の基本的な使い方を示すサンプルコードです。
5 * 連想配列の最初の要素を取り出し、配列がどのように変更されるかを示します。
6 *
7 * array_shift() は、配列の先頭から要素を1つ取り除き、その値(取り除かれた要素の値)を返します。
8 * 取り除かれた要素は元の配列から削除されます。
9 * 連想配列の場合、挿入順序における最初のキーと値のペアが対象となります。
10 * 残りの要素のキーは保持され、数値キーのような再インデックスは発生しません。
11 */
12function demonstrateArrayShiftWithAssociativeArray(): void
13{
14    // システムエンジニアの情報を表す連想配列を初期化します。
15    // 各要素は「キー => 値」の形式です。
16    $engineerProfile = [
17        'id'       => 1001,
18        'name'     => '田中 太郎',
19        'position' => 'シニアエンジニア',
20        'team'     => '開発チームA',
21    ];
22
23    echo "--- 1. array_shift() 実行前の連想配列 ---\n";
24    print_r($engineerProfile);
25
26    // array_shift() を使用して、配列の最初の要素を取り出します。
27    // この場合、'id' キーとその値 '1001' が対象となります。
28    // 戻り値は取り出された要素の「値」です。
29    $shiftedValue = array_shift($engineerProfile);
30
31    echo "\n--- 2. array_shift() で取り出された要素 ---\n";
32    echo "取り出された値: " . $shiftedValue . "\n"; // '1001' が表示されます。
33
34    echo "\n--- 3. array_shift() 実行後の連想配列 ---\n";
35    // 'id' 要素が削除され、残りの要素のキーと値はそのまま保持されます。
36    print_r($engineerProfile);
37}
38
39// 関数を実行して、array_shift() の動作を確認します。
40demonstrateArrayShiftWithAssociativeArray();

PHPのarray_shift()関数は、配列の先頭にある要素を一つ取り除き、その値を取り出すための関数です。引数には、変更したい配列そのものを参照渡しで指定します。そのため、関数が実行されると元の配列から先頭の要素が削除され、配列自体が変更されます。戻り値としては、取り除かれた要素の値が返されます。もし配列が空だった場合や、配列ではない変数を渡した場合はnullが返されます。

連想配列に対してarray_shift()を使用した場合、挿入順序における最初のキーと値のペアが対象となります。サンプルコードでは、$engineerProfile配列の最初の要素である'id' => 1001が取り除かれます。取り除かれた値1001$shiftedValueに格納されますが、元の$engineerProfile配列からは'id'要素が完全に削除されます。その際、残りの要素('name', 'position', 'team')のキーと値はそのまま保持され、数値キーのように再インデックスされることはありません。このように、array_shift()は配列の先頭要素を効率的に操作する際に役立ちます。

array_shift()関数は、引数として渡された配列から先頭の要素を直接削除し、元の配列自体が変更される破壊的な操作です。連想配列に対して使用する場合、挿入順序で最初のキーと値のペアが取り除かれますが、残りの要素のキーは数値キーのように再インデックスされず、元の状態が維持されますのでご注意ください。戻り値は、取り除かれた要素の「値」のみで、キーは含まれません。また、空の配列に対してこの関数を実行するとnullが返されますので、処理を行う前に配列が空でないかを確認すると、より安全にコードを記述できます。

関連コンテンツ

関連プログラミング言語