[PHP] 身長の平均値を計算しよう

これまで「関数電卓なみの計算をしよう」ということで、変数やif文、for文を使ってきました。いよいよ配列を使います。https://paiza.io/ja のオンライン環境がおすすめです。

身長と体重

6人の身長と体重です。

人物身長体重
エレン17063
ミカサ17068
アルミン16355
エルヴィン18892
リヴァイ16065
ハンジ17060

https://進撃の巨人ブログ.com/character_profile/

エルヴィン、でかいんだね

ステップ1: 数値の直書き

最初は、数値を直接書きます。

まず、6人の身長を足して、合計を計算します。

合計値を人数で割り、平均値を計算します。

平均は、約170.2cmですね。

ここまで、変数名は、$a〜$zだけを使ってきましたが、2文字以上の変数名も使うことができます。

ここでは、合計用に変数$sum、平均用に変数$avgを使います。

<?php
$sum = 170 + 170 + 163 + 188 + 160 + 170;
$avg = $sum / 6;
echo $avg;
Code language: PHP (php)
170.16666666667Code language: plaintext (plaintext)

電卓代わりね。

ステップ2: 人数分の変数

6人の身長を6個の変数に代入してから、さきぼどと同じように計算します。

<?php
$a = 170;
$b = 170;
$c = 163;
$d = 188;
$e = 160;
$f = 170;
$sum = $a + $b + $c + $d + $e + $f;
$avg = $sum / 6;
echo $avg;
Code language: PHP (php)
170.16666666667Code language: plaintext (plaintext)

これの何が問題かというと、身長データが一人増えるたびに、変数を増やす必要があります。そして、$sum の計算式にもその変数を足す必要があります。

人数が増えると、変数も増やさないとね。

ステップ3: 配列

Scratchにも配列があったね。

Scratchの配列の添字は、1始まりだったわ。

ここで配列の登場です。配列は「一つの変数」で「複数の値」を扱うことができます。

配列は、[]で囲み、各値をカンマで区切ります。

<?php
$a = [170, 170, 163, 188, 160, 170];
Code language: PHP (php)

配列内の各値のことを「要素」と呼びます。各要素には0から始まる位置があります。上の例で言うと、0番目は170、1番目は170、2番目は163、3番目は188、4番目は160、5番目は170です。

各要素の位置の数値を添字に指定して、値を表示できます。

echo $a[0] . "\n";
echo $a[3] . "\n";
Code language: PHP (php)
170
188Code language: plaintext (plaintext)

最初に、空(カラ)の配列を作っておいて、添字を指定しながら、要素を一つずつ代入することもできます。

<?php
$a = [];
$a[0] = 170;
$a[1] = 170;
$a[2] = 163;
$a[3] = 188;
$a[4] = 160;
$a[5] = 170;
Code language: PHP (php)

配列の要素数を調べることができます。count関数を使います。

echo count($a);
Code language: PHP (php)
6Code language: plaintext (plaintext)

ステップ4: array_sum関数バージョン

身長データを配列に格納すると、array_sum関数を使うことができます。

array_sum関数は、引数で渡した配列の要素の合計値を返します。

$sum = array_sum($a);
echo $sum . "\n";Code language: PHP (php)
1021Code language: plaintext (plaintext)

$sumを人数で割ります。

$avg = $sum / count($a);
echo $avg . "\n";Code language: PHP (php)
170.16666666667Code language: plaintext (plaintext)

まとめると、

<?php
$a = [170, 170, 163, 188, 160, 170];

$sum = array_sum($a);
echo $sum . "\n";

$avg = $sum / count($a);
echo $avg . "\n";Code language: PHP (php)
1021
170.16666666667Code language: plaintext (plaintext)

array_average関数もあればいいのにね

それはないようね。

ステップ5: for文バージョン

配列の各要素をfor文で処理することを「配列をfor文で回す」と言うわね。

配列の操作に慣れるために、for文を使って、合計を計算しましょう。

配列の要素数が6個、ループカウンタは、0から5(を含む)まで、for文の本体を実行します。

要素数count($a) は6なので、$i < 6 となる、$i < count($a) が正しいです。

$i <= count($a) としてしまうと、$i <= 6 となり、ループカウンタは、0から6(を含む)の間、for文の本体を実行します。すると、要素のない $a[6] を表示することになってしまうので、間違いです。

$i <= count($a) - 1 でもいいのかな?

間違いではないわ。でも、配列をfor文で回すときは、$i < count($a) と書いたほうがいいわ。そのような習慣なの。

まず、何も計算せず、要素を表示します。

<?php
$a = [170, 170, 163, 188, 160, 170];

for ($i = 0; $i < count($a); $i += 1) {
    echo  $a[$i] . "\n";
}
Code language: PHP (php)
170
170
163
188
160
170Code language: plaintext (plaintext)

表示を確認できたら、変数$sumを用意して、合計を計算します。

$sum = 0;
for ($i = 0; $i < count($a); $i += 1) {
    $sum += $a[$i];
}

echo $sum . "\n";Code language: PHP (php)
1021Code language: plaintext (plaintext)

最後に、$sumを人数で割ります。

$avg = $sum / count($a);
echo $avg . "\n";Code language: PHP (php)
170.16666666667Code language: plaintext (plaintext)

まとめると、

<?php
$a = [170, 170, 163, 188, 160, 170];

$sum = 0;
for ($i = 0; $i < count($a); $i += 1) {
    $sum += $a[$i];
}

echo $sum . "\n";

$avg = $sum / count($a);
echo $avg . "\n";Code language: PHP (php)
1021
170.16666666667Code language: plaintext (plaintext)

ステップ6: foreach文バージョン

for文の仲間にforeach文があります。

for文は、カウンタ変数でループを回すので、配列以外の処理でも使います。

foreach文は、配列専用のループ処理です。カウンタ変数やループ終了条件が不要です。

<?php
$a = [170, 170, 163, 188, 160, 170];

$sum = 0;
foreach ($a as $e) {
    $sum += $e;
}

echo $sum . "\n";

$avg = $sum / count($a);
echo $avg . "\n";Code language: PHP (php)
1021
170.16666666667Code language: plaintext (plaintext)

for文とforeach文、どちらを使えばいいのかな?

一般的には、配列の操作にはforeach文のほうがいいわ。

でも、どちらも使えるようになってね。

タイトルとURLをコピーしました