【PHP8.x】reset関数の使い方

作成日: 更新日:

reset関数は、PHPの配列が持つ内部ポインタを、その配列の最初の要素にリセットする役割を実行する関数です。

PHPの配列には、配列内の現在の要素を指し示す「内部ポインタ」と呼ばれる仕組みが備わっています。このポインタは、current()next()prev()end()といった関数と組み合わせて使用することで、配列の要素を順に処理したり、特定の場所へ移動したりするために使われます。

reset関数が呼び出されると、この内部ポインタは常に配列の先頭、つまり最初の要素を指すように設定されます。これにより、その後にcurrent()関数などを使えば、常に配列の最初の要素の値を取得できるようになります。

この関数は、ポインタが指すようになった最初の要素の値を返します。もし対象の配列が空である場合や、ポインタをリセットできなかった場合は、falseが返されます。

reset関数は、配列のキーが数値の連番ではない場合や、文字列キーを持つ連想配列の場合でも、確実に「最初の要素」にアクセスしたいときに非常に役立ちます。例えば、foreachループとは異なり、複数の異なる処理で同じ配列を複数回走査したい場合や、途中でポインタの位置を初期状態に戻したい場合に利用されます。この関数は、配列の内容自体を変更することはありません。

基本的な使い方

構文(syntax)

<?php
$myArray = ['apple', 'banana', 'cherry'];
reset($myArray);

引数(parameters)

array|object &$array

  • array|object &$array: リセット対象の配列またはオブジェクト(参照渡し)

戻り値(return)

mixed

配列の先頭要素の値を返します。

サンプルコード

PHP reset()で配列の先頭要素を取得する

<?php

/**
 * reset() 関数を使った配列のサンプルコード
 */

// 配列を定義
$array = ['apple', 'banana', 'orange'];

// 配列の内部ポインタを先頭に移動
$firstElement = reset($array);

// 結果を出力
echo "最初の要素: " . $firstElement . PHP_EOL; // 出力: 最初の要素: apple

// もう一度確認
echo "現在の要素 (current): " . current($array) . PHP_EOL; // 出力: 現在の要素 (current): apple

// 配列が空の場合
$emptyArray = [];
$result = reset($emptyArray);

// 空の配列の場合、reset() は false を返す
var_dump($result); // 出力: bool(false)

// オブジェクトのプロパティに対する reset() の挙動(非推奨、PHP 7.2 以降はエラー/警告)
// ここでは説明のためにコメントアウトしていますが、オブジェクトでの使用は避けるべきです。
/*
$obj = new stdClass();
$obj->a = 'A';
$obj->b = 'B';
reset($obj); // E_WARNING: reset() expects parameter 1 to be array, object given
*/

PHPのreset()関数は、配列の内部ポインタを先頭の要素に移動させるために使用します。引数には、操作対象の配列を渡します。配列は参照渡しであるため、元の配列が直接変更されます。

サンプルコードでは、まず$arrayという名前の配列を定義し、reset()関数を適用しています。reset($array)を実行すると、配列の内部ポインタが最初の要素である'apple'を指すようになります。reset()関数は、配列の最初の要素の値を返します。もし配列が空の場合、reset()関数はfalseを返します。

current()関数を使って現在の要素を確認すると、reset()関数の実行後、最初の要素である'apple'が返されることがわかります。空の配列に対してreset()を適用した場合の挙動もvar_dump()で確認しています。

また、サンプルコードにはオブジェクトに対するreset()の適用例が含まれていますが、PHP 7.2以降では非推奨であり、E_WARNINGが発生します。したがって、reset()関数は配列に対してのみ使用するようにしてください。reset()関数を使うことで、配列の処理を最初からやり直したい場合に便利です。

reset()関数は、配列の内部ポインタを先頭要素に移動させ、その要素の値を返します。配列が空の場合はfalseを返すことに注意が必要です。current()関数で現在の要素を確認できます。PHP 7.2以降では、reset()関数にオブジェクトを渡すと警告またはエラーが発生するため、配列でのみ使用してください。オブジェクトに対して同様の操作を行う場合は、array_values()などで配列に変換してからreset()を使用することを検討してください。また、参照渡し(&$array)であるため、元の配列が直接変更される点にも留意が必要です。

PHP reset()で配列の先頭要素を取得する

<?php

/**
 * 配列の内部ポインタを先頭に戻す reset() 関数の使用例
 *
 * reset() は配列の内部ポインタを最初の要素に移動し、その値を返します。
 * この関数は配列のキーを振り直す(0から始まる連番にする)機能はありません。
 */
function demonstrateResetFunction(): void
{
    // キーが0から始まらない、かつ連続していない配列を定義
    $fruits = [
        1 => 'Apple',
        3 => 'Banana',
        5 => 'Cherry'
    ];

    echo '元の配列:' . PHP_EOL;
    print_r($fruits);
    echo PHP_EOL;

    // next() を使って内部ポインタを2番目の要素 'Banana' に進める
    next($fruits);
    echo 'next() 実行後の現在の要素: ' . current($fruits) . PHP_EOL; // 出力: Banana
    echo PHP_EOL;

    // reset() を使って内部ポインタを先頭に戻す
    // 戻り値として最初の要素の値 'Apple' が返される
    $firstElement = reset($fruits);

    echo 'reset() の戻り値: ' . $firstElement . PHP_EOL; // 出力: Apple
    echo 'reset() 実行後の現在の要素: ' . current($fruits) . PHP_EOL; // 出力: Apple
    echo PHP_EOL;

    // reset() 実行後も、配列のキーは変更されていないことを確認
    echo 'reset() 後の配列:' . PHP_EOL;
    print_r($fruits);
}

// 関数を実行
demonstrateResetFunction();

PHPのreset()関数は、配列の内部ポインタを先頭の要素に戻すための関数です。引数には、操作したい配列またはオブジェクトを渡します。この関数は参照渡しで動作するため、元の配列の内部ポインタが直接変更されます。戻り値としては、内部ポインタが移動した後の最初の要素の値が返されます。

サンプルコードでは、キーが0から始まらず、連続していない$fruits配列を例にreset()の挙動を確認しています。まずnext()関数で内部ポインタを2番目の要素「Banana」に進め、current()でその値を確認します。その後reset()を実行すると、内部ポインタは再び最初の要素である「Apple」に戻り、reset()の戻り値としても「Apple」が取得されます。current()で再度確認しても「Apple」が返されることがわかります。

重要な点として、reset()関数は配列の内部ポインタを操作するだけで、配列のキー自体を振り直したり、0から始まる連番にしたりする機能はありません。reset()実行後も、配列の構造(キーと値のペア)は元のまま維持されていることを、サンプルコードの出力から確認できます。

PHPのreset()関数は、配列の内部ポインタを最初の要素に戻すためのものです。関数の名前から、配列のキーを0から始まる連番に振り直したり、要素を削除したりする機能だと誤解されやすいですが、キーや値は一切変更されません。この関数の役割は、ポインタの位置を先頭に移動させることだけです。戻り値として最初の要素の値を返しますが、配列が空の場合はfalseが返るので注意してください。foreachではなくnext()current()で配列を操作した後に、再び先頭から処理を開始したい場合などに有効です。

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