[PHP] rangeの使いどころ

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個'
)

 

 

 

 

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>