PHP7.4.1で作った値の積算と平均を演算する簡単なスクリプトです。
<?php
$bbb = []; //$aaa格納用の配列
do {
echo '整数を入力してください(0で終了します)';
$aaa = (int)trim(fgets(STDIN));
if ($aaa === 0) {
echo '計算を終了します。'; //終了時メッセージ
break; //スクリプトの終了
}
array_push($bbb, $aaa); //配列の末尾に$aaaの追加
$ccc = 0; //合計用
for ($i=0; $i<count($bbb); $i++) {
echo $i+1, ' → ', $bbb[$i], "\n"; //最新の$aaaの値を出力
$ccc += $bbb[$i]; //合計
}
echo "現在の合計は{$ccc}です。\n"; //合計の出力
$ddd = $ccc / $i; //平均
echo "現在の平均は{$ddd}です。\n"; //平均の出力
} while(true); //if文のbreakで止まるのでここはtrue
$bbb = []; //$aaa格納用の配列
do {
echo '整数を入力してください(0で終了します)';
$aaa = (int)trim(fgets(STDIN));
if ($aaa === 0) {
echo '計算を終了します。'; //終了時メッセージ
break; //スクリプトの終了
}
array_push($bbb, $aaa); //配列の末尾に$aaaの追加
$ccc = 0; //合計用
for ($i=0; $i<count($bbb); $i++) {
echo $i+1, ' → ', $bbb[$i], "\n"; //最新の$aaaの値を出力
$ccc += $bbb[$i]; //合計
}
echo "現在の合計は{$ccc}です。\n"; //合計の出力
$ddd = $ccc / $i; //平均
echo "現在の平均は{$ddd}です。\n"; //平均の出力
} while(true); //if文のbreakで止まるのでここはtrue
このスクリプトでは、ターミナルで入力した数値をArray型である$bbbに順次+=で代入しながら、$aaaの値と$bbb内の合計値と$bbb内の平均値を出力しています。
どの場所で変数宣言をするのかというのは、けっこう重要なポイントです。
たとえば空の配列である$bbbですが、この変数の宣言をdo文の中でおこなうと、2回目以降に入力された値が+=ではなく直接的に代入されてしまいます。
つまりこの場合、$bbbの値と$aaaの値は毎回完全に同じものになってしまいます。
当然ですが、こうなってしまうと合計も平均も出せません。
$dddがfor文の外で宣言されているのも$bbbと同じ理由です。
見てくれの問題でfor文内の$cccの宣言の下行に$dddを書いたりすると、$dddの値がINFになってしまいます。
どの場所でどの変数を宣言するのか……重要なポイントですね。
以上です。