• 締切済み

PHPで画像を表示するプログラムについて

実行するとランダムで取得した値を利用して、3パターンくらいの画像を切り替えて表示するPHPファイル を作成したいです! 以下のように書いてみたのですが、如何せん初心者なものでできない原因すらわかりません! 間違っているところを是非指摘していただきたいです。 宜しくお願い致します <?php $rand = rand(1,10); switch($rand){ case 1: echo("1"); break; case 2: echo("2"); break; case 3: echo("3"); break; case 4: echo("4"); break; case 5: echo("5"); break; case 6: echo("6"); break; case 7: echo("7"); break; case 8: echo("8"); break; case 9: echo("9"); break; case 10: echo("10"); break; if ($rand <= 3){ echo"<img src='a.jpg'>"; } elseif ($rand 4< || $rand >6 ) { echo"<img src='b.jpg'>"; elseif ($rand 7< || $rand >10 ) { echo"<img src='c.jpg'>"; } } ?>

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

見た感じ、1~10の数値をifで場合分けするロジックの演習ですよね 演算子の書き方もおかしいし、論理式の考え方も変 さらに文法エラーもあるので、もうすこし教科書をよくよんで 気をつけて書いた方がいいでしょう $randが3以下、4以上6以下、7以上10以下の場合分けであれば if ($rand <= 3){ echo"<img src='a.jpg'>"; }elseif ($rand <=6 ) { echo"<img src='b.jpg'>"; }else { echo"<img src='c.jpg'>"; } ifは前から評価されますから最初に3以下をチェックしているので つぎにelseifを使うのであれば$randはすでに4以上は確定しています 同様に次のifで6以下をチェックしているのであれば 最後のelseは7以上が確定しています 無駄だと理解したうえでどうしてもかきたいなら if ($rand >= 1 and $rand <= 3){ echo"<img src='a.jpg'>"; }elseif ($rand >=4 and $rand <=6 ) { echo"<img src='b.jpg'>"; }elseif ($rand >=7 and $rand <=10 ) { echo"<img src='c.jpg'>"; }

ko2imple
質問者

お礼

有難うございます!!

noname#244856
noname#244856
回答No.3

小学校でよくあった「習った漢字しか使っちゃダメ」みたいな縛りプレイは大嫌いなのですが、まぁ一応回答はしておきますね…既存のコードを修正する方針でいきます。 1. randの代わりにより動作が高速なmt_randを使いましょう。また、範囲は0~2(または1~3)を指定しましょう。3つしか要素が無いなら0,1,2(1,2,3)の中から選ばせれば等しい確率になりますよね?最初に書いたコードでは全体が「100%」のイメージで分母を10にしたんだと思いますが、分母は10である必要はありません。選択肢が3通りなので3にするのが正解です。 PHP Manual - mt_rand http://www.php.net/manual/ja/function.mt-rand.php 2. 確認用だとは思いますが、switchブロックは無意味なので全部消してください。 3. あとはif文で if ($rand == 0) { } elseif ($rand == 1) { } else { } のように分岐させるだけですよね。 また、今後のためのアドバイスとして…PHPではせっかく2つの対応関係を並べられる「配列」が非常に便利なので積極的に利用しましょう。if文やswich文で分岐させるよりはあらかじめ定義しておいた配列のパターンを選択する方がコードは美しく書けます。

ko2imple
質問者

お礼

有難うございます!!(^^)

noname#244856
noname#244856
回答No.2

1行で書くなら <?php printf('<img src="%s.jpg">', array_rand(array_flip(range('a', 'c'))));

ko2imple
質問者

補足

if文で書けという指示なんですT_T! 教えてください!

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

まず、 $rand 4< $rand 7< などという比較の書き方は PHP にはありません。 次に、 a || b は「a か b のどちらかが成り立つか」という意味で、「a と b の両方とも成り立つか」という意味ではありません。 最後に、elseif は「括弧内が成り立たないならば」という意味ではなく「それ以前の if/else の条件が成り立たず、かつ、括弧内が成り立つならば」という意味です。 おまけで、上記をすべてなおしたとしてもたぶん 1/10 の確率で画像が出ないか、あるいは、他の画像よりも表示されやすい画像が出てくるでしょう。rand の引数を再検討しましょう。

ko2imple
質問者

お礼

どうもありがとうございます!!!!

関連するQ&A