【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' => '有効')は、元の連想キーを失います。そして、自動的に0、1、2といった数値の連番キーを持つ配列として再インデックスされます。このように、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が返されますので、処理を行う前に配列が空でないかを確認すると、より安全にコードを記述できます。