2009-04-13
PHP vol.7
- 配列 array
array・・・配列
型の1つ。引き出しみたいなもの
<?php $hikidashi = array("CD", "DVD", "ノート", "ゲームソフト"); var_dump($hikidashi);
実行結果
$ php 041301.php
array(4) {
[0]=>
string(2) "CD"
[1]=>
string(3) "DVD"
[2]=>
string(9) "ノート"
[3]=>
string(18) "ゲームソフト"
}
ノートだけ出力したい場合・・・
//var_dump($hikidashi);の部分を・・・ echo $hikidashi[2]."\n"; //にする。
実行結果
$ php 041301.php ノート
上記の実行結果からarrayの[2]にはノートが入っているのでノートが表示された。
通し番号には自分で指定することもできる。
<?php $hikidashi[2] = "CD"; $hikidashi[4] = "DVD"; $hikidashi[6] = "ノート"; $hikidashi[8] = "ゲームソフト"; echo $hikidashi[2]."\n";
実行結果
$ php 041301.php CD
<?php $aisatsu = array("朝"=>"おはよう","昼"=>"こんにちは","夜"=>"こんばんは"); var_dump($aisatsu);
$ php 041302.php
array(3) {
["朝"]=>
string(12) "おはよう"
["昼"]=>
string(15) "こんにちは"
["夜"]=>
string(15) "こんばんは"
}
var_dumpの代わりに$aisatsu["昼"]をに変更すると
$ php 041302.php こんにちは
連想配列
| キー | 値 | |||
| $aisatsu | ["朝"] | = | "おはよう" | ; |
問題
<?php $student = array(70,60,90,80,50); $ans = 0; $max = 0; for ($i=0;$i<5;$i++) { $ans = $ans + $student[$i]; if ($student[$i] > $max) { $max = $student[$i]; } } echo "最大得点:".$max."\n"; echo "合計:".$ans."\n"; echo "平均:".($ans/$i)."\n";
実行結果
$ php 041303.php 最大得点:90 合計:450 平均:75
foreach文
配列の要素を順番に取り出しながら繰り返す。
foreach (配列 as 変数値) {
実行処理
}
さっきの問題をforeach文で書き換えてみる。
<?php $student = array(70,60,90,80,50,100,98); foreach ($student as $point) { echo $point."\n"; $i++; //合計得点を出す。 $ans = $ans + $point; //最大得点を出す。 if ($point > $max) { $max = $point; } } echo "最大得点:".$max."\n"; echo "合計:".$ans."\n"; echo "平均:".($ans/$i)."\n";
実行結果
$ php 041304.php 70 60 90 80 50 100 98 最大得点:100 合計:548 平均:78.285714285714
arrayのkeyを取り出すことができる。
$変数 = array("xxxx" => yyy ....);
foreach (変数 as キー => 値)
上の例で言うと変数の中からキーと値を取り出し、変数の値が無くなるまで回る。
as以降の文章のキー = >値は変数部分の"xxxx" => yyyが当てはまる。
下記の例から言うと"araki" => 70の部分。$keyがaraki、$pointが70になる。
言葉にするとよくわからないのですが何となく理解しました。
<?php //$student = array("araki" => 70,"enomoto" => 60,"fukata" => 90,"ichikawa" => 80,"oharazawa" => 50); //上と下の$studentは同じ意味になる。ここでは下のを使う。 $student["araki"] = 70; $student["enomoto"] = 60; $student["fukata"] = 90; $student["ichikawa"] = 80; $student["oharazawa"] = 50; //$key => $point foreach ($student as $key => $point) { echo $key.":".$point."\n"; $i++; //合計得点を出す。 $ans = $ans + $point; //最大得点を出す。 if ($point > $max) { $max = $point; $max_name = $key; } } echo "最大得点:".$max."(".$max_name.")\n"; echo "合計:".$ans."\n"; echo "平均:".($ans/$i)."\n";
実行結果
$ php 041304.php araki:70 enomoto:60 fukata:90 ichikawa:80 oharazawa:50 最大得点:90(fukata) 合計:350 平均:70
多次元配列
例)
<?php /* $student = array("araki" => array("国語" => 70,"数学" => 60,"英語" => 90), "enomoto" => array("国語" => 80,"数学" => 50,"英語" => 40)); */ $student["araki"]["国語"] = 70; $student["araki"]["数学"] = 60; $student["araki"]["英語"] = 90; $student["enomoto"]["国語"] = 80; $student["enomoto"]["数学"] = 50; $student["enomoto"]["英語"] = 40; var_dump($student);
実行結果
$ php 041306.php
array(2) {
["araki"]=>
array(3) {
["国語"]=>
int(70)
["数学"]=>
int(60)
["英語"]=>
int(90)
}
["enomoto"]=>
array(3) {
["国語"]=>
int(80)
["数学"]=>
int(50)
["英語"]=>
int(40)
}
}
表示させてみた。
<?php /* $student = array("araki" => array("国語" => 70,"数学" => 60,"英語" => 90), "enomoto" => array("国語" => 80,"数学" => 50,"英語" => 40)); */ $student["araki"]["国語"] = 70; $student["araki"]["数学"] = 60; $student["araki"]["英語"] = 90; $student["enomoto"]["国語"] = 80; $student["enomoto"]["数学"] = 50; $student["enomoto"]["英語"] = 40; foreach ($student as $name => $array) { echo $name."さんの\n"; foreach ($array as $category => $point) { echo $category."は\t".$point."点\n"; } }
実行結果
$ php 041306.php arakiさんの 国語は 70点 数学は 60点 英語は 90点 enomotoさんの 国語は 80点 数学は 50点 英語は 40点
自習1
上記のコードに最高得点を表示する機能をつけてみた。
<?php $student = array("araki" => array("国語" => 70,"数学" => 60,"英語" => 90), "enomoto" => array("国語" => 80,"数学" => 50,"英語" => 40)); /* $student["araki"]["国語"] = 70; $student["araki"]["数学"] = 60; $student["araki"]["英語"] = 90; $student["enomoto"]["国語"] = 80; $student["enomoto"]["数学"] = 50; $student["enomoto"]["英語"] = 40; */ foreach ($student as $name => $array) { echo $name."さんの\n"; foreach ($array as $category => $point) { echo $category."は\t".$point."点\n"; if ($point >= $max) { $max = $point; $max_c = $category; $max_n = $name; } } } echo "@最高得点@\n".$max_n."さんの".$max_c.":".$max."点です。\n";
実行結果
$ php jishu01.php arakiさんの 国語は 70点 数学は 60点 英語は 90点 enomotoさんの 国語は 80点 数学は 50点 英語は 40点 @最高得点@ arakiさんの英語:90点です。
Copyright © crazyup. All rights reserved.


