5. ハッシュ配列について
今日は、ハッシュ配列について詳しくご説明いたします。
■ハッシュ配列とは
ハッシュとは簡単に言ってしまうと、文字列を添字とする配列です。
通常の配列
$a[0]
$a[1]
の数字の部分が文字列のキーとなります。
$a['name']
$a['email']
[ ] の代わりに { } を、' ' の代わりに " " を使用してもできます。
ハッシュ配列を使用すると、簡易的なデータベースとして扱うこともできます。
$a[0]に名前、$a[1]にメールアドレスが入っているとするより、$a['name']に名前、
$a['email']にメールアドレスが入っているとした方が分かりやすいですね。
■ハッシュへの代入
$Hash = array( "one" => 1 , "two" => 2 , "three" => 3 );
キー値 => 値という組み合わせでハッシュ配列を定義しています。
キー値 one two three
値 1 2 3
$Hash['five'] = 5;
キー = "five"、値 = 5 と対応して作成されます。
$Hash = array();
空のハッシュ配列を作成、もしくは、配列の中身を空にします。
■参照
次に示すサンプルハッシュを元に、ハッシュを参照するやり方を見てみます。
【サンプルハッシュ】
-----------------------------------------------------------------
$Hash = array( "one" => 1 , "two" => 2 , "three" => 3 );
print $Hash['two'];
-----------------------------------------------------------------
ハッシュのキー値"two"に対応づけられた値が表示されます。
表示 → 2
-----------------------------------------------------------------
print_r($Hash);
-----------------------------------------------------------------
キー値、関連付けられた値の全てを出力します。ただし、その順番は保証されません。
表示 → Array ( [one] => 1 [two] => 2 [three] => 3 )
ハッシュ全ての要素に処理を行う場合は、foreachを使用して全てのキー値を出力する
ことができます。
foreach ($ハッシュ名 as $キー => $値) {
処理
}
このように記述すると、$キーと$値に、それぞれキーと値が順番に格納されてループ
します。全て参照し終わった時点でこのforeachブロックを終了します。
-----------------------------------------------------------------
foreach ( $Hash as $key => $value ) {
print "キー値 : $key\n";
print "値 : $value \n";
}
-----------------------------------------------------------------
上記の場合、$keyにキー値が、$valueにハッシュ値が入ります。
ハッシュ配列を操作する関数がいくつかありますが、関数については、別の機会に
まとめてご紹介します。
★今日のまとめサンプルプログラム
-----------------------------------------------------------------
<HTML>
<BODY>
<?
$weekday = array(
1=>'Sunday',
2=>'Monday',
3=>'Tuesday',
4=>'Wednesday',
5=>'Thursday',
6=>'Friday',
7=>'Saturday');
foreach ($weekday as $key => $value ) {
print $value . '<br>';
}
print "<br>12月3日は";
print $weekday['6'];
print "です。<br>";
?>
</BODY>
</HTML>
-----------------------------------------------------------------
■解説
サンプルを実行していただくと分かると思いますが、キー7の要素"Saturday"から
表示されているかと思います。
基本的にハッシュ配列はあまり順番を意識するものではなく、キーを指定して値を
取り出す配列なので、あまりループで回して処理をするこということは少ないと
思います。
★課題
1. 以下のハッシュ配列
$weekday = array(
1=>'Sunday',
2=>'Monday',
3=>'Tuesday',
4=>'Wednesday',
5=>'Thursday',
6=>'Friday');
の配列を作成してから、
7=>'Saturday'
を追加し、HTML中に全て表示してください。
2. 以下のキーとデータをハッシュ配列に格納し、HTML中に全て表示してください。
name : しょう
email : searchai@zw.main.jp
address : 東京都渋谷区
tel : 090-6934-9953
★前回の課題の解答
1. 以下の データを配列に格納し、HTML中にfor文を使用して表示するプログラムを
作成してください。
'Jan','Feb','Mar','Apr','Jun','Jul','Aug','Sep','Oct','Nov','Dec'
→下のサンプルを参照してください。
2. 以下は、ある11人のテストの点数です。11人の合計点と平均点をHTML中に
表示するプログラムを作成してください。
75点、80点、88点、49点、69点、77点、93点、72点、81点、58点、72点
→下のサンプルを参照してください。
-----------------------------------------------------------------
<HTML>
<BODY>
<?
// 1.の解答例
$month = array('Jan','Feb','Mar','Apr','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
for ($i = 0; $i < count($month); $i++) {
print $month[$i] . " ";
}
print "<br>";
// 2.の解答例
$sum = 0;
$ary = array(75,80,88,49,69,77,93,72,81,58,72);
foreach ($ary as $tmp) {
$sum += $tmp;
}
$avg = $sum / count($ary);
print "合計点は $sum 点です。<br>";
print "平均点は $avg 点です。<br>";
?>
</BODY>
</HTML>
-----------------------------------------------------------------
■解説
for文でループさせる場合は、カウントする変数を使用して配列を 1つずつ取り出し
ます。配列の最大数は、count()で取ることができます。
テストの点数は、合計点を計算し、別の変数に平均点を格納しておくとよいかと
思います。
|