【PHP】演習問題 – break文(2)

問題

次の実行例になるような複数商品の合計料金を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 商品の料金は『単価×個数』とする
  • 商品名、単価、個数は標準入力で入力する
  • 商品名、単価、個数のいずれかに空入力が入力された時点で、入力を終了する
    ※ 空入力 = 何も入力せずにEnterキーを押す

実行例1

コマンドライン

<<<< 商品入力 >>>>
商品名 > 炭酸水
単価  > 150
個数  > 2
商品名 > 弁当
単価  > 560
個数  > 2
商品名 > お菓子
単価  > 300
個数  > 7
商品名 > 

<<<<  会計  >>>>
---- 合計料金 ----
3520
----  明細  ----
商品名 : 炭酸水
単価  : 150
個数  : 2
.................
商品名 : 弁当
単価  : 560
個数  : 2
.................
商品名 : お菓子
単価  : 300
個数  : 7
.................

実行例2

<<<< 商品入力 >>>>
商品名 > ローストビーフ
単価  > 1500
個数  > 2
商品名 > ワイン
単価  > 500
個数  > 4
商品名 > 牡蠣
単価  > 600
個数  >  

<<<<  会計  >>>>
---- 合計料金 ----
5000
----  明細  ----
商品名 : ローストビーフ
単価  : 1500
個数  : 2
.................
商品名 : ワイン
単価  : 500
個数  : 4
.................

解答例

ソースコード

<?php

$items = [];

$total = 0;

echo "<<<< 商品入力 >>>>\n";
while( true ) {
    echo "商品名 > ";
    $name = trim(fgets(STDIN));
    if( $name == '' ) {
        break;
    }
    echo "単価  > ";
    $price = trim(fgets(STDIN));
    if( $price == '' ) {
        break;
    }
    echo "個数  > ";
    $unit = trim(fgets(STDIN));
    if( $unit == '' ) {
        break;
    }
    
    $items[] = [ 'name'=>$name, 'price'=>$price, 'unit'=>$unit ];
    
    $total += $price * $unit;
}

echo "\n";

echo "<<<<  会計  >>>>\n";
echo "---- 合計料金 ----\n";
echo $total."\n";
echo "----  明細  ----\n";
foreach( $items as $item ) {
    echo "商品名 : ".$item['name']."\n";;
    echo "単価  : ".$item['price']."\n";
    echo "個数  : ".$item['unit']."\n";;
    echo ".................\n";
}

?>