dポイントプレゼントキャンペーン実施中!

実行するとランダムで取得した値を利用して、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'>";

}


}
?>

A 回答 (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'>";
}
    • good
    • 0
この回答へのお礼

有難うございます!!

お礼日時:2014/09/09 20:46

小学校でよくあった「習った漢字しか使っちゃダメ」みたいな縛りプレイは大嫌いなのですが、まぁ一応回答はしておきますね…既存のコードを修正する方針でいきます。



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文で分岐させるよりはあらかじめ定義しておいた配列のパターンを選択する方がコードは美しく書けます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/09/09 20:46

1行で書くなら



<?php
printf('<img src="%s.jpg">', array_rand(array_flip(range('a', 'c'))));

この回答への補足

if文で書けという指示なんですT_T!

教えてください!

補足日時:2014/06/01 01:50
    • good
    • 0

まず、


$rand 4<
$rand 7<
などという比較の書き方は PHP にはありません。

次に、
a || b
は「a か b のどちらかが成り立つか」という意味で、「a と b の両方とも成り立つか」という意味ではありません。

最後に、elseif は「括弧内が成り立たないならば」という意味ではなく「それ以前の if/else の条件が成り立たず、かつ、括弧内が成り立つならば」という意味です。

おまけで、上記をすべてなおしたとしてもたぶん 1/10 の確率で画像が出ないか、あるいは、他の画像よりも表示されやすい画像が出てくるでしょう。rand の引数を再検討しましょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/09/09 20:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!