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

作成日: 更新日:

range関数は、指定された開始値から終了値までの連続した数値や文字からなる配列を生成する関数です。この関数は、繰り返し処理の範囲を動的に定義したい場合や、特定の一連のデータを簡単に作成したい場合に非常に役立ちます。

主な引数は三つあります。一つ目のstartは、生成される配列の最初の値を指定します。二つ目のendは、配列の最後の値を指定します。endの値自体も、範囲に含まれる場合があります。三つ目のstepはオプションの引数で、配列の各要素間の増分または減分を指定します。stepが省略された場合、デフォルトで1が設定されます。

具体的には、startから始まり、stepで指定された間隔で値が増減していき、endに達するか、超える直前までの値が配列の要素として格納されます。例えば、start1end5の場合、[1, 2, 3, 4, 5]という配列が生成されます。step2を指定すると、[1, 3, 5]のようになります。また、start5end1step-1のように負の値を指定すると、降順の配列[5, 4, 3, 2, 1]を生成することも可能です。

この関数は数値だけでなく、アルファベットの小文字や大文字に対しても同様に連続した値を生成できます。例えば、'a'から'e'までの範囲を指定すると、['a', 'b', 'c', 'd', 'e']という配列が得られます。

range関数は、簡潔なコードで規則的なデータの並びを作成できるため、プログラムの可読性と保守性を高める上で重要な役割を果たします。

基本的な使い方

構文(syntax)

range(1, 10);

引数(parameters)

int|float $start, int|float $end, int|float $step = 1

  • int|float $start: 数列の開始値を指定します。
  • int|float $end: 数列の終了値を指定します。
  • int|float $step = 1: 数列の増分値を指定します。省略した場合、1になります。

戻り値(return)

array

指定された範囲の数値や文字の配列を生成します。

サンプルコード

PHP range ゼロ埋め配列を生成する

<?php

/**
 * 指定された範囲の数値を生成し、指定された桁数になるように先頭をゼロで埋めます。
 *
 * @param int $start 範囲の開始値
 * @param int $end 範囲の終了値
 * @param int $minLength ゼロ埋め後の最小桁数
 * @param int $step (オプション) 各要素間の増分値。デフォルトは1
 * @return array<string> ゼロ埋めされた数値の文字列配列
 */
function generateZeroPaddedRange(int $start, int $end, int $minLength, int $step = 1): array
{
    // range関数を使用して、指定された開始値から終了値までの数値配列を生成します。
    // 例: range(1, 3) は [1, 2, 3] を返します。
    $numbers = range($start, $end, $step);

    // array_map関数とsprintf関数を組み合わせて、配列の各数値にゼロ埋め処理を適用します。
    // sprintfの '%0' . $minLength . 'd' は、
    // 例として $minLength が 2 の場合 '%02d' となり、
    // 数値を最小2桁の整数としてゼロで埋めることを意味します。
    $zeroPaddedNumbers = array_map(function (int $number) use ($minLength): string {
        return sprintf('%0' . $minLength . 'd', $number);
    }, $numbers);

    return $zeroPaddedNumbers;
}

// --- サンプルコード実行例 ---

// 1から10までの数値を生成し、それぞれを2桁でゼロ埋めした結果を表示します。
// 出力例: "01", "02", ..., "10"
$paddedValues = generateZeroPaddedRange(1, 10, 2);
foreach ($paddedValues as $value) {
    echo $value . PHP_EOL;
}

// 出力を見やすくするための改行
echo PHP_EOL;

// 0から5までの数値を生成し、それぞれを3桁でゼロ埋めした結果を表示します。
// 出力例: "000", "001", ..., "005"
$paddedValuesFromZero = generateZeroPaddedRange(0, 5, 3);
foreach ($paddedValuesFromZero as $value) {
    echo $value . PHP_EOL;
}

// 出力を見やすくするための改行
echo PHP_EOL;

// 10から30までを5ステップで生成し、それぞれを2桁でゼロ埋めした結果を表示します。
// 出力例: "10", "15", "20", "25", "30"
$paddedValuesWithStep = generateZeroPaddedRange(10, 30, 2, 5);
foreach ($paddedValuesWithStep as $value) {
    echo $value . PHP_EOL;
}

PHPのrange関数は、指定された開始値から終了値までの連続した数値の配列を生成します。引数として開始値$start、終了値$endを受け取り、任意で各数値間の増分値$stepを指定できます。この関数は、生成された数値が格納された配列を戻り値として返します。

このサンプルコードでは、range関数で生成した数値を、さらに指定された桁数で先頭をゼロ埋めする処理を組み合わせています。具体的には、まずrange関数で数値の配列を作成し、その各数値に対してarray_map関数とsprintf関数を使ってゼロ埋め処理を適用することで、ゼロ埋めされた数値の文字列配列を生成して返します。

例えば、generateZeroPaddedRange(1, 10, 2)のように呼び出すと、1から10までの数値を2桁でゼロ埋めした「01」「02」…「10」といった文字列の配列が得られます。また、generateZeroPaddedRange(0, 5, 3)では「000」「001」…「005」が、generateZeroPaddedRange(10, 30, 2, 5)では5ステップで「10」「15」「20」「25」「30」が生成されることが確認できます。このような機能は、連番のファイル名やIDなど、決まったフォーマットで数値を扱う場面で役立つでしょう。

このサンプルコードでは、range関数が指定した範囲の数値配列を生成し、引数でfloat型も扱える点にご留意ください。ゼロ埋め処理は整数を文字列に変換する際に利用されます。特に、sprintf関数の%0書式は、指定された最小桁数まで先頭をゼロで埋める役割を持ちます。dは整数として出力する書式指定です。生成される配列の各要素は、ゼロ埋めされた「文字列」となるため、これらの値を計算に利用する際は、再度数値型へ明示的に変換する必要があります。また、generateZeroPaddedRange関数のminLengthが元の数値の桁数より小さい場合でも、数値が途中で切れることなく、元の桁数で表示される点にご注意ください。step引数を負の値に設定すると降順の配列も生成可能ですが、その際は開始値が終了値よりも大きい必要があります。

PHP rangeとforeachで数字リストを生成する

<?php

/**
 * PHPのrange関数とforeachループの基本的な使用方法を示す関数。
 * range関数で指定された範囲の数値を生成し、
 * foreachループでその数値を順番に処理して出力します。
 */
function demonstrateBasicRangeAndForeach(): void
{
    // range関数を使用して、1から5までの整数を含む配列を生成します。
    // 第三引数 (step) は省略されており、デフォルト値の1が使用されます。
    // これにより、$numbersは [1, 2, 3, 4, 5] となります。
    $numbers = range(1, 5);

    echo "--- range(1, 5) で生成された数字リスト ---\n";

    // foreachループは、配列の各要素を順番に処理するために使用されます。
    // `$numbers`配列の各要素が、ループごとに一時的に`$number`変数に代入されます。
    foreach ($numbers as $number) {
        echo "現在の数字: " . $number . "\n";
    }
}

// 上記の関数を実行し、range関数とforeachループの動作を確認します。
demonstrateBasicRangeAndForeach();

PHPのrange関数は、指定された数値の範囲で配列を生成するために使用されます。この関数は、最初の引数$startで開始値を、二番目の引数$endで終了値を指定し、これらの値を含む連続した数値の配列を生成します。オプションの三番目の引数$stepを使用すると、数値の増分(例えば2ずつ増やすなど)を設定できますが、省略された場合はデフォルトで1が使用されます。range関数の戻り値は常に配列です。

提供されたサンプルコードでは、range(1, 5)と記述することで、1から5までの整数を含む配列[1, 2, 3, 4, 5]が生成され、$numbers変数に格納されます。

次に登場するforeachループは、配列の各要素を順番に処理するための構文です。foreach ($numbers as $number)という記述は、$numbers配列から要素を一つずつ取り出し、ループごとにその要素の値を$number変数に代入するという意味です。これにより、ループ内で$numberを使用することで、配列内の各数値を個別に処理できます。サンプルコードでは、このループを使って生成された各数字を画面に出力しています。

このように、range関数で効率的に数値配列を生成し、foreachループでその配列の要素を簡単に繰り返し処理することができます。これは、特定の回数だけ処理を行いたい場合や、数値のリストを扱う際に非常に役立つ基本的なパターンです。

range関数は、指定された開始値から終了値までの数値を配列として生成します。終了値は必ずしも配列に含まれるとは限りませんのでご注意ください。step引数を省略するとデフォルトで1ずつ増えますが、負の値を指定することも可能です。その場合、開始値は終了値よりも大きく設定する必要があります。range関数は、すべての数値をメモリ上に配列として展開するため、非常に大きな範囲を指定するとメモリを大量に消費し、システムの動作に影響を与える可能性があります。巨大な範囲を扱う際は、メモリ使用量を抑える工夫が必要です。foreachループは、このrange関数で生成された配列の各要素を順に処理するのに非常に便利です。

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