[PHP]指定した範囲の値を配列で返すrange関数

range関数の使い方の解説

range関数を使うと指定した範囲の整数やアルファベットなどが入った配列を作成してくれます。

実際に書き方によって、どのように処理されるのか見ていきましょう。

基本的な書き方

構文

range()の書き方

range(始まりの値, 終わりの値 [, 増える数 = 1] );

各パラメータの説明

  • 始まりの値(多様な型/ 必須): 範囲のスタートしたい値
  • 終わりの値(多様な型/ 必須): こちらで指定した値まで処理が続行する
  • 増える数(正の数/ オプション): ここで指定した間隔で増える(指定がなければ1ずつ)

それぞれの動作一覧

それではパラメータの値によって、どのように動作するのか見ていきましょう!

基本の整数

range関数はint型で使うことがほとんどなのではないでしょうか。
浮動少数点であるfroat型では出力できません。

昇順で並べる

$ArrNumberOrder = range(1, 10);
print_r($ArrNumberOrder);

/* 処理結果 */
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [9] => 10
)

指定した1から10まで順番に入った配列が作成されました!

増加の間隔を指定する

$ArrNumberOrder = range(1, 10, 2);
print_r($ArrNumberOrder);

/* 処理結果 */
Array
(
    [0] => 1
    [1] => 3
    [2] => 5
    [3] => 7
    [4] => 9
)

第3引数で指定した2ずつ増加しています。

こちらで見れるように終了値は、あくまで範囲の終わりを表すもので実際に配列に入る最後の数値ではなくてもいいというのが分かります。

降順にする

$ArrNumberOrder = range(10, 1);
print_r($ArrNumberOrder);

/* 処理結果 */
Array
(
    [0] => 10
    [1] => 9
    [2] => 8
    [3] => 7
    [4] => 6
    [5] => 5
    [6] => 4
    [7] => 3
    [8] => 2
    [9] => 1
)

始まりと終わりの値を大きい→小さいに指定すると自動的に降順にしてくれます。

文字列を並べる

range関数の文字出力はASCIIコードを元にしているので、アルファベットや記号を出力が可能になっています。
そのため、日本語には残念ながら対応していません
(日本語を指定すると空の配列を返します。)

アルファベット

$ArrCharOrder = range('d', 'h');
print_r($ArrCharOrder);

/* 処理結果 */
Array
(
    [0] => d
    [1] => e
    [2] => f
    [3] => g
    [4] => h
)
指定した’d’から’h’まで並んでいます。

大文字アルファベット

$ArrCharOrder = range('D', 'H');
print_r($ArrCharOrder);

/* 処理結果 */
Array
(
    [0] => D
    [1] => E
    [2] => F
    [3] => G
    [4] => H
)
このように大文字での指定も可能です。

ASCIIコードのすべての文字を出力してみる

$ArrAsciiChar = range('!', '~');
print_r($ArrAsciiChar);

/* 処理結果 */
Array
(
    [0] => !
    [1] => "
    [2] => #
    [3] => $
    [4] => %
    [5] => &
    [6] => '
    [7] => (
    [8] => )
    [9] => *
    [10] => +
    [11] => ,
    [12] => -
    [13] => .
    [14] => /
    [15] => 0
    [16] => 1
    [17] => 2
    [18] => 3
    [19] => 4
    [20] => 5
    [21] => 6
    [22] => 7
    [23] => 8
    [24] => 9
    [25] => :
    [26] => ;
    [27] => < 
    [28] => =
    [29] => >
    [30] => ?
    [31] => @
    [32] => A
    [33] => B
    [34] => C
    [35] => D
    [36] => E
    [37] => F
    [38] => G
    [39] => H
    [40] => I
    [41] => J
    [42] => K
    [43] => L
    [44] => M
    [45] => N
    [46] => O
    [47] => P
    [48] => Q
    [49] => R
    [50] => S
    [51] => T
    [52] => U
    [53] => V
    [54] => W
    [55] => X
    [56] => Y
    [57] => Z
    [58] => [
    [59] => \
    [60] => ]
    [61] => ^
    [62] => _
    [63] => `
    [64] => a
    [65] => b
    [66] => c
    [67] => d
    [68] => e
    [69] => f
    [70] => g
    [71] => h
    [72] => i
    [73] => j
    [74] => k
    [75] => l
    [76] => m
    [77] => n
    [78] => o
    [79] => p
    [80] => q
    [81] => r
    [82] => s
    [83] => t
    [84] => u
    [85] => v
    [86] => w
    [87] => x
    [88] => y
    [89] => z
    [90] => {
    [91] => |
    [92] => }
    [93] => ~
)
ASCII表にあるすべての文字が出力されました!(制御文字は除く)
range関数の文字出力はこちらに準拠しています。
こちらで出力した0~9の数字はstring型になっているので注意。

foreachとの組み合わせ

foreach文内で一時的な配列を作成、ループ処理をすることもできます。
要素と値の数値に整合性をもたせた配列を作成するときに便利です。

//1~5までの画像ファイル名が入った配列を作成
$ArrImageFile = array();

foreach(range(1, 5) as $Number) {
    $ArrImageFile[$Number] = $Number.'.jpg';
}

print_r($ArrImageFile);

/* 処理結果 */
Array
(
    [1] => 1.jpg
    [2] => 2.jpg
    [3] => 3.jpg
    [4] => 4.jpg
    [5] => 5.jpg
)

同様の処理をfor文で書き直すとこんな感じです。

//1~5までの画像ファイル名が入った配列を作成
$ArrImageFile = array();

for ($i = 1; $i <= 5; $i++) {
     $ArrImageFile[$i] = $i.'.jpg';
}

print_r($ArrImageFile);

まとめ

  • range関数は指定した範囲の整数や文字が並んだ配列を作成する
  • float型は出力できない
  • 文字はASCIIコードを元にして出力される
  • アルファベットや記号以外のASCIIコードにない日本語などの文字は出力できない