• ベストアンサー

ループしてしまいます

$colの結果は5件です。 次のfor文を流すと、cnt=1の場合の $SyaNo . $cnt = $col2['SyaName']; が print $SyaNo . $cnt によって表示されますが、 cnt=1のみの結果がループします。 cnt=2、cnt=3、cnt=4の結果はどうしたら表示されるでしょうか? どうしてループしてしまうのでしょうか? --------- while($col = mysql_fetch_array($result1)){ for($cnt=1; $cnt<=4; $cnt++){ print $cnt . " "; print $col[SyaNo.$cnt] . " "; if ($col[SyaNo.$cnt] != ""){ $sql = "select SyaName from Syain where SyaNo = " . $col[SyaNo.$cnt]; $result2 = mysql_query($sql,$link); $col2 = mysql_fetch_array($result2); $SyaNo . $cnt = $col2['SyaName']; print $SyaNo . $cnt; } } ------------- $body .= "<td>" . $SyaNo1 . "</td>\n"; $body .= "<td>" . $SyaNo2 . "</td>\n"; $body .= "<td>" . $SyaNo3 . "</td>\n"; $body .= "<td>" . $SyaNo4 . "</td>\n";

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

${'SyaNo'.$cnt} でしたね。すみません。 中かっこ内が文字列としたときに使いたい変数名になってる必要があると言うことです。

mkhkck
質問者

お礼

ありがとうございました。 解決しました。 こちらこそ、わけもわからず使い、質問してしまい、 すみませんでした。 またよろしくお願いします!

その他の回答 (3)

  • a987654
  • ベストアンサー率26% (112/415)
回答No.3

>どうしてループしてしまうのでしょうか? ループしているのではなく、5件実行したいwhileが 一回だけで抜け出してしまっているのではないでしょうか? (ループしていたらリセットする以外停止しないでしょうから) 本題に戻ります。 2,3,4,5が実行されないのは while($col = mysql_fetch_array($result1))文の mysql_fetch_array($result1)が以降の文の実行1回で変更 されている以外あり得ないと思います。 中身が判らないので直し方を書けないのですが、こういう時は print文等で怪しげなものを1つずつ確認してゆくのが デバッグの早道(大昔さんざんやりました)と思います。 又 while($col = mysql_fetch_array($result1)){ でも動くとは思いますが、本来はNO1のかたの言われている while($col == mysql_fetch_array($result1)){ が正解だと思います。

mkhkck
質問者

補足

コメントありがとうございます。 月曜日に見てみます。

回答No.2

質問者さんがやりたいのは、可変変数を使ってその変数値に値を代入したいということではないですか? <?php $SyaNo . $cnt = $col2['SyaName']; print $SyaNo . $cnt; ?> ここの部分、 これを <?php ${$SyaNo.$cnt} = $col2['SyaName']; print ${$SyaNo.$cnt}; ?> としてみてください。

mkhkck
質問者

お礼

正しく出力されました! ありがとうございました。 ただし、${$SyaNo.$cnt} が $SyaNo1であり、 「浅野優斗」という文字の場合、 $body .= "<td>" . $SyaNo1 . "</td>\n"; $body .= "<td>" . $SyaNo2 . "</td>\n"; $body .= "<td>" . $SyaNo3 . "</td>\n"; $body .= "<td>" . $SyaNo4 . "</td>\n"; の、$SyaNo1では、「浅野優斗」と表示されるはずなのですが、 表示されません。 上でセットした値が正しく保持されていないのでしょうか。 それとも、「$SyaNo1」という表記が正しくないのでしょうか? もし、原因がお分かりでしたら、教えていただけませんでしょうか。 よろしくお願いします。

mkhkck
質問者

補足

コメントありがとうございます。 月曜日に、検証してみますね。

回答No.1

while($col = mysql_fetch_array($result1)){ が while($col == mysql_fetch_array($result1)){ でないといけないのでは?

mkhkck
質問者

補足

コメントありがとうございます。 他のプログラムは、 while($col = mysql_fetch_array($result1)){ で通っているのです。。。