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

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

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

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

Q&A

解決済

2回答

151閲覧

PHPでの代入ができません

rin_305

総合スコア14

PHP

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

0グッド

0クリップ

投稿2018/12/18 03:05

PHPをsublime text(Version 3.1.1)を使用してシステムを作成しています。

以下のサンプルは代入の成功確認ができていますが、こちらを参考に説明させていただきます。

コード実行時に①の部分では代入確認ができているのですが、②にfor文から出たときに、すべて最後に代入されたものが入ってしまいます。
ですので、var_dump等で出力時に②の段階で’21:00:00’が3つ格納されているの確認されます。
単純なミスかも知れませんが、原因にもし心あたりがある方は教えていただきたく願います。

$sample=array(); $sample[0] = new stdClass(); $sample[1] = new stdClass(); $sample[2] = new stdClass(); $sample[0]->id=1; $sample[0]->time="12:00:00"; $sample[1]->id=2; $sample[1]->time="14:00:00"; $sample[2]->id=3; $sample[2]->time="16:00:00"; $start_time = array( '18:00:00', '20:00:00', '21:00:00', ); for($i = 0; $i < count($sample); ++$i){ $sample[$i]->time = $start_time[$i];

--------①
}
--------②

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

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

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

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

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

guest

回答2

0

自己解決

すみません。
for文の中の変更自体はできていましたが、やはり変更先のプロパティですかね?
それが同じだったためすべて変わっていたようです。
別変数を作りそちらから読み出すようにしましたので、スマートでは無いですが解決しました。

もし、いいアイディアがあるのでしたら。
ご教授お願いします。

投稿2018/12/18 03:47

rin_305

総合スコア14

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

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

0

掲載されたコードの最後で var_dump すると以下の結果になりますが、そうならないという質問なのですよね?
であれば、分かりにくいので実際に1と2で var_dump した結果も載せた方が良いのでは?

array(3) { [0]=> object(stdClass)#1 (2) { ["id"]=> int(1) ["time"]=> string(8) "18:00:00" } [1]=> object(stdClass)#2 (2) { ["id"]=> int(2) ["time"]=> string(8) "20:00:00" } [2]=> object(stdClass)#3 (2) { ["id"]=> int(3) ["time"]=> string(8) "21:00:00" } }

投稿2018/12/18 03:18

ssasaki

総合スコア1167

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

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

rin_305

2018/12/18 03:26

そうですね、ご指摘ありがとうございます。 ①ですと object(stdClass)#240 (2) { ["id"]=> int(1) ["time"]=> string(8) "18:00:00" } object(stdClass)#141 (2) { ["id"]=> int(2) ["time"]=> string(8) "20:00:00" } object(stdClass)#39 (2) { ["id"]=> int(3) ["time"]=> string(8) "21:00:00" } この文では成功確認していますが、 私がなっている現象として、②は array(3) { [0]=> object(stdClass)#148 (2) { ["id"]=> int(1) ["time"]=> string(8) "21:00:00" } [1]=> object(stdClass)#142 (2) { ["id"]=> int(2) ["time"]=> string(8) "21:00:00" } [2]=> object(stdClass)#39 (2) { ["id"]=> int(3) ["time"]=> string(8) "21:00:00" } } 以上のようになります。 現在確認しているところなのですが、参照先が一緒になっているため、 このようになるような気がしてきます。
ssasaki

2018/12/18 03:46

1の方は、for 文ですから、3回表示されるわけですが、一番最後のものが上記のようになったということなのですかね? また、1と2は同時に表示にしているのでしょうか? だとしたら、object(stdClass)# のあとの数字が、配列の1つ目と2つ目は変わってしまっているのが気になりますが。。 最初の回答にも書きましたが、掲載されたプログラムをそのままコピペした場合には想定通りの結果で表示されているので、掲載された以外の部分のコードか環境が問題なのだとは思います。
rin_305

2018/12/18 03:53

1と2は同時に表示していました。 サンプルがあまり良くなかったのは、すみません。 本来は、データベースから読み出してsampleの中身ができていましたが、詳しくかけませんでしたので分かりづらい質問になっていました。 改めて確認してみると、参照先が同じプロパティ?担っていたので、一つ変更するとすべて変わるようでした。 解決済みにしてしまいまいましたが、ご指摘ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問