PHPのrangeという関数がある。
range(0,5); と書くと、以下のようになり、
array(6) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) }
range(a,d); と書くと、以下のようになる。
array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" }
あとは、第3引数にstep数を入れて、偶数のみとか、a,c,eとか作れる。
この関数の使いどころは、HTMLのselect文だと思う。
(「在庫の数値を持ってきて、そこから数を引き落とす」といった場合など)
以下のようにforeachで回す。
<form> <select name="stock" class="form-control col-md-3"> <?php foreach( $items as $item) :?> <option value="<?=$item?>"><?=$item?></option> <?php endforeach;?> </select> </form>
さらに、 フレームワークを使用している場合、select文の作成を手助けしてくれる関数には配列を渡すことがある。(以下CakePHP2の例)
<form> <?= $this->Form->input('Stock',['options'=>$items]);?> </form>
ただし、 フレームワークの場合、range(1,5); で作った配列を入れると、
<option value="0">1</option> <option value="1">2</option> <option value="2">3</option> <option value="3">4</option> <option value="4">5</option>
のように、valueと表示する値がずれてしまう。
その場合、array_combineを使って以下のようにする。
$items = array_combine(range(1,5),range(1,5))
さらに、そこまでする必要は無いかもだが、array_mapとsprintfなどを組み合わせて、
$items_age = array_map(function($val) { return sprintf('%d個', $val); }, range(1, 5)); $items = array_combine(range(1, 5), $items_age);
以下のように出すこともできる。
array( (int) 1 => '1個', (int) 2 => '2個', (int) 3 => '3個', (int) 4 => '4個', (int) 5 => '5個' )