【PHP8.x】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)

array_shift(array &$array): mixed

引数(parameters)

array &$array

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

戻り値(return)

mixed

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

サンプルコード

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

<?php

/**
 * array_shift関数の基本的な使い方を示すサンプルコードです。
 * 連想配列に対してarray_shiftを適用した場合の挙動を特に示します。
 */

// サンプルとして連想配列を定義します。
$associativeArray = [
    'id' => 101,
    'name' => '田中',
    'role' => '管理者',
    'status' => '有効',
];

echo "--- 元の連想配列 ---\n";
print_r($associativeArray);

// array_shift関数を適用し、配列の先頭要素を取り出します。
// 連想配列の場合、先頭要素の値が返され、元の配列からはそのキーと値のペアが削除されます。
// 残りの要素は数値キーにリセットされ、連番になります。
$shiftedValue = array_shift($associativeArray);

echo "\n--- array_shiftで取り出された値 ---\n";
// 取り出された値は'id'キーに対応する'101'です。
var_dump($shiftedValue);

echo "\n--- array_shift後の連想配列 ---\n";
// 'id' => 101 が削除され、残りの要素のキーが数値にリセットされている点に注目してください。
print_r($associativeArray);

?>

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で連想配列の先頭要素を取り出す

<?php

/**
 * array_shift() 関数の基本的な使い方を示すサンプルコードです。
 * 連想配列の最初の要素を取り出し、配列がどのように変更されるかを示します。
 *
 * array_shift() は、配列の先頭から要素を1つ取り除き、その値(取り除かれた要素の値)を返します。
 * 取り除かれた要素は元の配列から削除されます。
 * 連想配列の場合、挿入順序における最初のキーと値のペアが対象となります。
 * 残りの要素のキーは保持され、数値キーのような再インデックスは発生しません。
 */
function demonstrateArrayShiftWithAssociativeArray(): void
{
    // システムエンジニアの情報を表す連想配列を初期化します。
    // 各要素は「キー => 値」の形式です。
    $engineerProfile = [
        'id'       => 1001,
        'name'     => '田中 太郎',
        'position' => 'シニアエンジニア',
        'team'     => '開発チームA',
    ];

    echo "--- 1. array_shift() 実行前の連想配列 ---\n";
    print_r($engineerProfile);

    // array_shift() を使用して、配列の最初の要素を取り出します。
    // この場合、'id' キーとその値 '1001' が対象となります。
    // 戻り値は取り出された要素の「値」です。
    $shiftedValue = array_shift($engineerProfile);

    echo "\n--- 2. array_shift() で取り出された要素 ---\n";
    echo "取り出された値: " . $shiftedValue . "\n"; // '1001' が表示されます。

    echo "\n--- 3. array_shift() 実行後の連想配列 ---\n";
    // 'id' 要素が削除され、残りの要素のキーと値はそのまま保持されます。
    print_r($engineerProfile);
}

// 関数を実行して、array_shift() の動作を確認します。
demonstrateArrayShiftWithAssociativeArray();

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

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

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

【PHP8.x】array_shift関数の使い方 | いっしー@Webエンジニア