[PHP]指定範囲の数値を連続したキーと値の配列にする関数、my_range()

Read More

タイトルではちょっとわかりにくいね。


まずは以下を見てもらいたい。


■こんな連続した配列を作りたい
<?php
$ary = array(
'1' => '1',
'2' => '2',
'3' => '3',
);
?>



上記のように要素数が少なければベタ書きでも良いし、数が多かったらfor文をぶん回してやればいい。

だけど、もっとスマートに色んな場面で利用しやすいようにしたかった。


これを自作関数のmy_range()を使うと要素がいくつになろうと以下の1行で済む。


■実行例
<?php
$ary = my_range(1, 3);
?>




さて肝心のmy_range()の定義内容は、


■自作関数my_range()
<?php
/***************************************
 * 指定範囲の数値を連続したキーと値の配列にする
 * *************************************40
 * range()の機能を拡張したもの。
 * optionタグ用の配列で、年や月、日などを生成するのに使う。
 * 数値の利用を想定しているが単一文字の指定も可。
 * 
 * ex) 数値の指定
 * $iMin=1, $iMax=12の場合
 * ary['1'] = '1';
 * ary['2'] = '2';
 * ary['3'] = '3';
 * ary['4'] = '4';
 * ary['5'] = '5';
 * ary['6'] = '6';
 * ary['7'] = '7';
 * ary['8'] = '8';
 * ary['9'] = '9';
 * ary['10'] = '10';
 * ary['11'] = '11';
 * ary['12'] = '12';
 * 
 * ex) 単一文字の指定
 * $iMin='a', $iMax='c'の場合
 * ary['a'] = 'a';
 * ary['b'] = 'b';
 * ary['c'] = 'c';
 * となる。

 * @param integer $iMin 最小値
 * @param integer $iPax 最大値
 * @param string $val_format='%s' 配列の値のフォーマット
 * @param string $key_format='%s' 配列のキーのフォーマット
 * @return array $ary
 * @since 002 - 2011/07/25
 */
function my_range($iMin, $iMax, $val_format='%s', $key_format='%s') {
 $ary=null;
 for($i=$iMin; $i<=$iMax; $i++) {
  $ary[sprintf($key_format, $i)] = sprintf($val_format, $i);
 }// end for
 return $ary;
}// end function
?>




上記を見てもらえばわかるように、
第3引数と第4引数で、配列のキーと値のフォーマットを変更することができる。


例えば配列の値の全てに"月"を付与してやりたい場合は第3引数を
'%d月'
としてやればよい。


また、配列のキーを
01、02、03、04、05、06、07、08、09、10、11、12
のように常に2桁にしたい場合は第4引数を
'%02d'
としてやれば良い。


■第3、第4引数を使った例
<?php
$ary = my_range(1, 12, '%d月', '%02d');
print_r($ary);
?>



■実行結果
> array('01' => '1月', '02' => '2月', => '03' => '3月'....省略




コレ、意外と使い勝手が良いので重宝している関数の一つ。




ちなみに自作関数を作る時は、その元となるPHP関数がある場合(それを拡張する形の自作関数になる時に限る)は関数の先頭に"my_"を付けるのが自分ルールとなっている。