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

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

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

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

Q&A

解決済

2回答

593閲覧

【PHP】classを用いた連想多次元配列の最後に要素を追加したい。

ra-men_love

総合スコア6

PHP

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

0グッド

0クリップ

投稿2021/05/27 11:55

編集2021/05/27 12:06

前提・実現したいこと

「Goods.php」privateで連想多次元配列として格納している商品に**「Admin.php」**から新たな商品を追加出来るようなシステムを作りたいと思っています。

現在、classと標準入力を用いた自動販売機アプリの作成をしています。
「VendingMachineController.php」「Goods.php」「Admin.php」「Money.php」
の4つのファイルを作成し、**「Admin.php」から商品名の変更や在庫の変更といったことのできる管理者画面の作成を行っています。
その際に、
「Goods.php」に連想多次元配列として格納している商品の後ろに「Admin.php」**から新たな商品の要素を追加したいと考えています。
「VendingMachineController.php」$modelGoodsとしてインスタンスを作成しています。

現在、発生している問題

「Admin.php」から連想多次元配列への追加を行う際に、エラーが出てしまい、うまくシステムが作動しません。

該当のソースコード

PHP

1Goods.php 2 3class Goods{ 4 private $goods = [ 5 ['name' => '緑茶', 'cost' => 100, 'stock' => 5], 6 ['name' => 'ウーロン茶', 'cost' => 120, 'stock' => 5], 7 ['name' => 'コーラ', 'cost' => 150, 'stock' => 5], 8 ['name' => 'サイダー', 'cost' => 150, 'stock' => 5], 9 ['name' => 'ジンジャーエール', 'cost' => 170, 'stock' => 5], 10 ]; 11 12 public function setCreateGoods($name){ 13 $this -> goods['name'] = $name; 14 } 15}

PHP

1Admin.php 2 3 public function addGoods($modelGoods){ 4 echo "追加する商品名を入力してください\n"; 5 $output6 = trim(fgets(STDIN)); 6 $modelGoods -> setCreateGoods($output6); 7 }

試したこと

①配列への追加を試しました。

PHP

1Goods.php 2public function setCreateGoods($name,$cost,$stock){ 3 $this -> goods['name'] = $name; 4 $this -> goods['cost'] = $cost; 5 $this -> goods['stack'] = $stock; 6 }

PHP

1Admin.php 2public function addGoods($modelGoods){ 3 echo "追加する商品名を入力してください\n"; 4 $output6 = trim(fgets(STDIN)); 5 echo "追加する商品の価格を入力してください\n"; 6 $output7 = trim(fgets(STDIN)); 7 echo "追加する商品の在庫を入力してください\n"; 8 $output8 = trim(fgets(STDIN)); 9 $modelGoods -> setCreateGoods($output6,$output7,$output8); 10 }

PHP Fatal error: Uncaught TypeError: Unsupported operand types: string + int
が表示されました。

PHP

1Goods.php 2 3public function setCreateGoods($name,$cost,$stock){ 4 $this -> goods[] = ['name' => $name, 'cost' => $cost, 'stock' => $stock]; 5 }

エラー表示出て作動しませんでした。

PHP

1Goods.php 2 3public function setCreateGoods($name,$cost,$stock){ 4 array_push($this -> goods,'name' => $name,'cost' => $cost,'stock' => $stock); 5 }

同じくエラー表示が出て作動しませんでした。

他にも、配置を変えたり調べたのですがどうしても解決することが出来ませんでした。
説明が分かりづらく申し訳ございません。
よろしければ、ご教授よろしくお願いいたします。

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

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

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

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

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

yh1224

2021/05/27 15:03

②で良い気がしますがどんなエラーでしょうか
ra-men_love

2021/05/27 15:31

ご回答ありがとうございます。 PHP Parse error: syntax error, unexpected identifier " " といったように表示されます。
yambejp

2021/05/28 00:45

標準入力が必須なのでしょうか? 標準入力をつかうということはpaizaあたりの学習サイトからの転載ですか? PHPなら通常はWEBベースなのでpost/get/セッションでの 値受け渡しだと思います。
guest

回答2

0

ベストアンサー

全角スペースが混ざっているので文法エラーになっています

PHP

1 2public function setCreateGoods($name,$cost,$stock){ 3 $this -> goods[] = ['name' => $name, 'cost' => $cost, 'stock' => $stock]; 4 }

PHP

1 2public function setCreateGoods($name,$cost,$stock){ 3 $this -> goods[] = ['name' => $name, 'cost' => $cost, 'stock' => $stock]; 4 }

使用しているエディタ名 全角スペース 表示
等で検索して、全角スペースが表示されるようにすることをお勧めします。

投稿2021/05/27 16:25

tanat

総合スコア18713

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

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

ra-men_love

2021/05/28 03:53

ありがとうございます。 全角スペースが入っていることに気づきませんでした。
guest

0

全体的に何をどうしたいかわかりません

PHP

1class Goods{ 2 private $goods = [ 3 ['name' => '緑茶', 'cost' => 100, 'stock' => 5], 4 ['name' => 'ウーロン茶', 'cost' => 120, 'stock' => 5], 5 ['name' => 'コーラ', 'cost' => 150, 'stock' => 5], 6 ['name' => 'サイダー', 'cost' => 150, 'stock' => 5], 7 ['name' => 'ジンジャーエール', 'cost' => 170, 'stock' => 5], 8 ]; 9 public function addGoods($name,$cost,$stock){ 10 $this -> goods[]=&$goods; 11 $goods['name'] = $name; 12 $goods['cost'] = $cost; 13 $goods['stock'] = $stock; 14 } 15 public function getGoods(){ 16 return $this -> goods; 17 } 18} 19$g=new Goods; 20$g->addGoods('test',1000,10); 21print_r($g->getGoods());

投稿2021/05/28 00:58

yambejp

総合スコア114919

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

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

ra-men_love

2021/05/28 03:55

②作成途中に全角スペースが入っていたため、エラー表示が出ていたようです。 ご教授ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問