質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1810閲覧

PHP Undefined array keyエラーを解決したい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/12/17 19:27

編集2021/12/17 19:34

PHP初心者です。
PHPで自動販売機のお釣りを計算するプログラムを作成しています。
150円のお茶を購入した際のお釣りを表示させるようにしたいです。
以下が現在書いているコードになります。
else if 以降はまだ手を付けていないため、if ($result>=0){}内をまず完成をめざしています。

PHP

1<?php 2 3// 以下は自動販売機のお釣りを計算するプログラムです。 4// 150円のお茶を購入した際のお釣りを計算して表示してください。 5// 計算内容は関数に記述し、関数を呼び出して結果表示すること 6// $yen と $product の金額を変更して計算が合っているか検証を行うこと 7 8// 表示例1) 9// 10000円札で購入した場合、 10// 10000円札x0枚、5000円札x1枚、1000円札x4枚、500円玉x1枚、100円玉x3枚、50円玉x1枚、10円玉x0枚、5円玉x0枚、1円玉x0枚 11 12// 表示例2) 13// 100円玉で購入した場合、 14// 50円足りません。 15 16$yen = 10000; // 購入金額 17$product = 150; // 商品金額 18 19function calc($yen, $product) { 20 // この関数内に処理を記述 21 $money = [10000, 5000, 1000, 500, 100, 50, 10, 5, 1]; //お金の種類 22 $result = $yen - $product; // おつりを計算する 23 $charge = []; // 返り値は配列になるため、空の配列を用意する 24 if ($result>=0){ // お釣りがある場合 25 foreach($money as $val){ 26 // お釣りを貨幣で割った整数値が枚数になるため、floor関数を使う 27 $num = floor($result/$val); 28 // そのまま配列へ格納 29 $charge[$val] = $num; 30 // 貨幣*枚数をお釣りから引いて、お釣りを再度計算する 31 $result -= ($num*$val); 32 } 33 echo $yen."円で購入した場合、<br>"."10000円札x".$charge[1]."枚、5000円札x".$charge[2]."枚、1000円札x".$charge[3]."枚、500円玉x".$charge[4]."枚、100円玉x".$charge[5]."枚、50円玉x".$charge[6]."枚、10円玉x".$charge[7]."枚、5円玉x".$charge[8]."枚、1円玉x".$charge[9]."枚"; 34 } else if($result<0){ // 過不足がある場合 35 foreach($money as $val){ 36 //過不足分を貨幣で割った整数値を配列へ格納する 37 38 } 39 40 } 41} 42?> 43<!DOCTYPE html> 44<html lang="ja"> 45<head> 46<meta charset="utf-8"> 47<title>お釣り</title> 48</head> 49<body> 50 <section> 51 <!-- ここに結果表示 --> 52 <?php 53 calc($yen, $product); 54 ?> 55 </section> 56</body> 57</html>

画面には次のように表示されています。

Warning: Undefined array key 2 in on line 38

Warning: Undefined array key 3 in on line 38

Warning: Undefined array key 4 in on line 38

Warning: Undefined array key 6 in on line 38

Warning: Undefined array key 7 in on line 38

Warning: Undefined array key 8 in on line 38

Warning: Undefined array key 9 in on line 38
10000円で購入した場合、

10000円札x0枚、5000円札x枚、1000円札x枚、500円玉x枚、100円玉x0枚、50円玉x枚、10円玉x枚、5円玉x枚、1円玉x枚

キーが見つからないとのことで、 foreach($money as $val){}内が間違えていると考え、解決策はないか調べていましたが、行き詰ってしまいました。どのようにエラーを解決していけばよいでしょうか?よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

foreach内ではなく、echoのコードの書き方が間違えていました。
ここが間違っていると決めつけはよくないですね。

PHP

1foreach($money as $val){ 2 // お釣りを貨幣で割った整数値が枚数になるため、floor関数を使う 3 $num = floor($result/$val); 4 // そのまま配列へ格納 5 $charge[$val] = $num; 6 // 貨幣*枚数をお釣りから引いて、お釣りを再度計算する 7 $result -= ($num*$val); 8 echo $val."円札✕".$charge[$val]."枚"; 9 if($val !== 1){ 10 echo "、"; 11 }

投稿2021/12/17 20:00

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問