たなしょのメモ

日々勉強していることをつらつらと

フラグ建てすぎかなぁ

難しかった

<?php
$menus = array(
array('name' => 'CURRY', 'price' => 900),
array('name' => 'PASTA', 'price' => 1200),
array('name' => 'COFFEE', 'price' => 600)
);

// この下にコードを書いてください
$cnt = 0;
$sum = 0;
$maxprice = 0;
$foodi = '';
$num = 0;
$flg = 0;
foreach ($menus as $menu) {
foreach($menu as $micro){
$num++;
if($cnt == 0){
echo $micro.'は';
}elseif($cnt == 1){
echo $micro.'円です';
$sum += $micro;
if($maxprice < $micro){
$maxprice = $micro;
$flg = $num - 1;
}
}
$cnt++;
}
$cnt = 0;
echo '<br>';
}

$num = 0;

foreach($menus as $menu){
foreach($menu as $foods){
$num++;
if($num == $flg){
$food = $foods;
}
}
}
echo "合計金額は{$sum}円です";
echo '<br>';
echo "{$food}が最高価格で{$maxprice}円です";

?>

 

 最後に「PASTAが最高価格で1200円です」が出力されればOK。

$numは連想配列のカウント用変数。最大で6まで出力される。(CURRY、900、PASTA...の順番)でカウントが上がる。

最大値を比較して$maxpriceに代入。

$flgには$num-1を設定。今回はPASTAを表示させたいから$flg=3が代入されなくてはならないので、1200が代入されたときには$num=4なので$flg=3。

 

二つ目のforeach文で再度$numのカウントを上げて、$num==$flgのときつまり両者が「3」のとき、値段が最大だった品目を代入する。

 

一応できたけど強引すぎたなぁ。もう少しスマートにできなものかな。