roomx.jp

Room No.1

PHP

range( ) による配列の生成

2012.09.22

配列を生成するには幾つかの方法がありますが、ある特定の範囲に限って配列を生成する場合、自分はrange関数を良く使います。

PHPマニュアルによると 『ある範囲の整数を有する配列を作成します』 とありますが、同ページ内にあるサンプルの様に文字列の配列も生成可能(PHP 4.1.0 以降)なので【A】から【Z】までのアルファベットを頭文字としたDB検索用インデックスとして配置したりする場合は良く使います。(参考:ASCII文字コード

他にも特定のIDの範囲(この場合は整数)を配列化してSQLを連続発行したり、特定の期間(この場合はUNIXタイム)を限定してカレンダーを生成したりと応用範囲は広いと思います。

◆PHPマニュアル
range - ある範囲の整数を有する配列を作成する
time - 現在の Unix タイムスタンプを返す
date - ローカルの日付/時刻を書式化する
getdate - 日付/時刻情報を取得する

Sample.1 - sample_range_1.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP:range - Sample.1</title>
</head>
<body>
<h1>PHP:range - Sample.1</h1>
<h2>A to Z INDEX</h2>

<?php
$arr_A2Z = range('A','Z'); //A-Z 配列
echo "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">";
echo "<tr>";
foreach($arr_A2Z as $char){
 	echo "<td><a href=\"#\">".$char."</a></td>";
}
echo "</tr>";
echo "</table>";
?>

</body> 
</html> 

アルファベットは小文字だけで無く大文字もOKデス。
実際には<table>タグもCSSを使って装飾する場合が殆どだと思いますが、サンプルなので…(^^;

 

range( ) の応用 - 日付

基本的な range() の書式はPHPマニュアルを参照してもらうとして、今回は range() を使って現在の日付(UNIXタイム)から1日毎のUNIXタイムを30日後まで配列化し、再度UNIXタイムを日付に変換して画面に出力するコードを書いてみました。

getdate() を使えば、現在の全ての時刻情報を連想配列として取得できますが、今回は秒の単位までは必要ないので getdate() は使っていません。時間単位、分単位まで管理するようなToDoリストを造りたい場合は getdate() を使って現在の時刻情報を取得した方が楽ですね。

Sample.2 - sample_range_2.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP:range - Sample.2</title>
</head>
<body>
<h1>PHP:range - Sample.2</h1>
<h2>Today + 30days</h2>


<?php
$now = mktime(0,0,0,date(m),date(d),date(Y));
$fet = $now + (86400 * 29);  //現在+29日=計30日 
$step = 86400;     //1日=86400秒
$arr_time = range($now, $fet, $step); //現在→30日後まで1日刻みで配列化 
echo "<ol>"; 
foreach($arr_time as $time){
	$date = date("Y-m-d \(D\)",$time); 	
	echo "<li>".$date."</li>"; 
}
echo "</ol>";
?>

</body>
</html> 

今回は date() 関数の出力フォーマットとして、曜日要素の“D”オプションも使っています。
また30日間が正しく配列として生成されているかを確認する為に<ol>タグを使っていますが、HTMLタグは目的やお好みに応じて使い分けて下さい。(^^;

▲BACK TO TOP