Hatena::ブログ(Diary)

crazyuplog このページをアンテナに追加 RSSフィード

2009-04-13

PHP vol.7

配列配列に頭クラクラ。理解できるようにがんばります。

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
多次元配列

arrayは配列の中に配列が作れる。

例)

<?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.