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

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

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

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

Q&A

解決済

1回答

304閲覧

コードの改善点を教えていただきたいです。

Tbeyonce

総合スコア26

PHP

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

0グッド

0クリップ

投稿2018/08/27 05:23

以下の問題のプログラムを書きましたが、変数名や流れに関して、こうした方が良いというところを教えていただきたいです。
よろしくお願いいたします。

/**

  • 製品A
  • 部品A2個と部品B1個からできている。
  • 製品B
  • 部品C3個と部品D2個からできている。
  • 製品C
  • 部品B1個と部品D1個からできている。
  • 製品Aと製品Bと製品Cをランダムで1個ずつ発注する。
  •  部品にはそれぞれ在庫がありそれがなくなるまで製造する。
  • 最後に以下を出力します。
  • 製造前の各部品の在庫数
  • 製品の発注数
  • 製造した製品の個数
  • 製造後の各部品の在庫数

*/

PHP

1$part_names = [ 2 'part1' => 'A', 3 'part2' => 'B', 4 'part3' => 'C', 5 'part4' => 'D', 6]; 7 8$part_stocks = [ 9 'part1' => 120, 10 'part2' => 120, 11 'part3' => 130, 12 'part4' => 130, 13]; 14 15$product_names = [ 16 'product1' => 'A', 17 'product2' => 'B', 18 'product3' => 'C', 19]; 20 21$needed_parts_counts = [ 22 'product1' => [ 23 'part1' => 2, 24 'part2' => 1, 25 ], 26 'product2' => [ 27 'part3' => 3, 28 'part4' => 2, 29 ], 30 'product3' => [ 31 'part2' => 1, 32 'part4' => 1, 33 ], 34]; 35 36$first_part_stocks = $part_stocks; 37$product_counts = []; 38$order_count = 0; 39 40while (true) { 41 $makeable_product_ids = []; 42 43 foreach ($needed_parts_counts as $product_id => $needed_parts_count) { 44 $can_make = true; 45 46 foreach ($needed_parts_count as $part_id => $needed_part_count) { 47 if ($part_stocks[$part_id] > $needed_part_count) { 48 $can_make = false; 49 break; 50 } 51 } 52 53 if ($can_make) { 54 $makeable_product_ids[] = $product_id; 55 } 56 } 57 58 if (count($makeable_product_ids) === 0) { 59 break; 60 } 61 62 $ordered_product_id = $makeable_product_ids[array_rand($makeable_product_ids)]; 63 $order_count++; 64 65 if (isset($product_counts[$ordered_product_id])) { 66 $product_counts[$ordered_product_id]++; 67 } else { 68 $product_counts[$ordered_product_id] = 1; 69 } 70 71 foreach ($needed_parts_counts[$ordered_product_id] as $part_id => $needed_part_count) { 72 $part_stocks[$part_id] -= $needed_part_count; 73 } 74} 75 76echo "製造前<br>"; 77 78foreach ($first_part_stocks as $part_id => $part_stock) { 79 echo '部品' . $part_names[$part_id] . ' ' . $part_stock . "個<br>"; 80} 81 82echo "<br>"; 83echo '発注 ' . $order_count . '回<br>'; 84 85foreach ($product_counts as $product_id => $product_count) { 86 echo '製品' . $product_names[$product_id] . ' ' . $product_count . "個<br>"; 87} 88 89echo "<br>"; 90echo "製造後<br>"; 91 92foreach ($part_stocks as $part_id => $part_stock) { 93 echo '部品' . $part_names[$part_id] . ' ' . $part_stock . "個<br>"; 94}

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

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

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

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

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

m.ts10806

2018/08/27 05:39

コードの前に質問の仕方をヘルプ熟読の上、改善してください。作業依頼に近しい内容です。
KazuhiroHatano

2018/08/27 05:49

オブジェクト指向にしよう、注文管理のクラスを作り注文を注文商品のIDと個数の配列を引数にメソッド一つでできるようにしよう、注文データの入出力はデータのソースがJSON、CSV、XMLとかのファイルになっても、DBになっても同じメソッドを使って入出力できるよう簡単に切り替えできるようにしておくと後々取り回しがいい
guest

回答1

0

自己解決

ありがとうございました。

質問の仕方を読んでからまた質問したいと思います。

投稿2018/08/27 06:04

Tbeyonce

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問