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

リロードする度に違う画像を表示させたいのですが
なかなかうまくいかないのでお力を貸してください!

・boxaには5枚の中から1枚をランダム表示させる
・boxbには10枚の中から3枚をランダム表示させる(重複させないで表示)

-----index.php-----
<div class="boxa">
<?php
require("test.php");
?>
</div>
<div class="boxb">
<?php
require("test2.php");
?>
<br />
<?php
require("test2.php");
?>
<br />
<?php
require("test2.php");
?>
</div>

-----test.php(http://php.eweb-design.com/0203_rt.phpさんのサンプルソースです)-----
<?php
$hit[0] = 1; $rtxt[0] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image1.gif" alt="バナー1" width="500" height="200" /></a>';
~~省略~~
$hit[4] = 1; $rtxt[4] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image4.gif" alt="バナー5" width="500" height="200" /></a>';
$length = count($hit) - 1;
for($i=0; $i<=$length; $i++) {
$m += $hit[$i];
}
srand( (double)microtime()*1000000 );
$n = round(rand(1,$m) );
for($i=0; $i<=$length; $i++) {
$x = $y;
$y += $hit[$i];
if($x<$n && $n<=$y) $ad = $rtxt[$i];
}
print("$ad");
?>

-----test2.php-----
<?php
$hit[0] = 1; $rtxt[0] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image6.gif" alt="バナー1" width="200" height="200" /></a>';
~~省略~~
$hit[9] = 1; $rtxt[9] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image15.gif" alt="バナー10" width="200" height="200" /></a>';
$length = count($hit) - 1;
for($i=0; $i<=$length; $i++) {
$m += $hit[$i];
}
srand( (double)microtime()*1000000 );
$n = round(rand(1,$m) );
for($i=0; $i<=$length; $i++) {
$x = $y;
$y += $hit[$i];
if($x<$n && $n<=$y) $ad = $rtxt[$i];
}
print("$ad");
?>

boxaにはtest.phpで指定した画像がランダム表示されるのですが
boxbにはtest.phpとtest2.phpで指定した画像が出てしまい重複表示されてしまいます。

boxbにはtest2.phpで指定した画像のみを重複しないでランダム表示
させたいのですがどのようにしたらよいのでしょうか?

A 回答 (3件)

またやってしまいました。


正しくはこうですね。

index.php
<?php
echo $af[$hyoji[0]]; //1枚目の画像表示箇所
?>

<?php
echo $af[$hyoji[1]]; //2枚目の画像表示箇所
?>

<?php
echo $af[$hyoji[2]]; //3枚目の画像表示箇所
?>
    • good
    • 0
この回答へのお礼

ありがとうございます!問題なく動作正常です☆
全くわからずで何度もお手数お掛けしましたが最後までご丁寧にありがとうございました^^

お礼日時:2007/06/25 02:49

あ、安易に書いてました原因は1個ずれてた。


file()を使うと配列のインデックスが0から代入されるから。
-1しとかないと、空の値になってしまい、表示されなくなります。

[誤]
$rand_n=rand(0,$row);
[正]
$rand_n=rand(0,$row-1);す。

test1.php
<?php
$fn="data1.txt";
$af=file($fn);
$row=count($af);
$rand_n=rand(0,$row);
print ("$af[$rand_n]");
?>

test2は『;』が抜けてました。
[正]
$hyoji=array_rand($af,3);
[誤]
$hyoji=array_rand($af,3)

test2.php
<?php
$fn="data2.txt";
$af=file($fn);
$row=count($af);
$hyoji=array_rand($af,3);
for($i=0;$hyoji[$i];$i++)
{
echo $hyoji[$i];
}
?>

phpについて知識がないということだったので
test2をそのまま実行すると3つの画像が連続でるので
好きな場所に配置する際は

test2.php
<?php
$fn="data2.txt";
$af=file($fn);
$row=count($af);
$hyoji=array_rand($af,3);
?>


index.phpには
<div>
<?php
require("test1.php");
?>
</div>

<div>
<?php
require("test2.php");
?>
</div>

<?php
echo $hyoji[0]; //1枚目の画像表示箇所
?>

<?php
echo $hyoji[1]; //2枚目の画像表示箇所
?>

<?php
echo $hyoji[2]; //3枚目の画像表示箇所
?>


というふうにやればいいです。

この回答への補足

こんばんはwidowwさん。またまたご丁寧にありがとうございます。^^
test1.phpも何度リロードしても空になることはなく表示できるようになりました☆
test2.phpはエラーがなくなったのですが1つ問題があります。

test2.php
<?php
$fn="data2.txt";
$af=file($fn);
$row=count($af);
$hyoji=array_rand($af,3);
?>


index.phpには
<div>
<?php
require("test1.php");
?>
</div>

<div>
<?php
require("test2.php");
?>
</div>

<?php
echo $hyoji[0]; //1枚目の画像表示箇所
?>

<?php
echo $hyoji[1]; //2枚目の画像表示箇所
?>

<?php
echo $hyoji[2]; //3枚目の画像表示箇所
?>
としました。

すると画像ではなく012が重複なしで表示されるのですが画像を出す為にはどのようにするのでしょうか?

数字が表示されているようなので試しに[ ]内に<a href~~><img~~></a>と入れてみたのですが見事にエラーでした^^;

data2.txtにはdata1.txtと同様の形式で
<a href="http://hogehoge.com"><img src="img/banner4.gif" alt="バナー4" width="200" height="200" /></a>
<a href="http://hogehoge.com"><img src="img/banner5.gif" alt="バナー5" width="200" height="200" /></a>
<a href="http://hogehoge.com"><img src="img/banner6.gif" alt="バナー6" width="200" height="200" /></a>
としています。

補足日時:2007/06/24 22:06
    • good
    • 0

配列名を変えてやればいいと思います。


$hit[0] = 1; $rtxt[0]
とかの部分をすべて

hit → hit2
rtxt → rtxt2
にするとかがいいと思います。

あと重複を許さずにとるときは
array_randを使えばいいと思います。
後半部分の $x,$n,$yがなんのためにあるのか不明です(汗)

あと画像をランダム表示させるようなプログラムなら
こんななんか手間かけなくてもいいきがします。
私なら。

test1.php
<?php
$fn="data1.txt";
$af=file($fn);
$row=count($af);
$rand_n=rand(0,$row);
print ("$af[$rand_n]");
?>

test2.php
<?php
$fn="data2.txt";
$af=file($fn);
$row=count($af);
$rand_n=rand(0,$row);
print ("$af[$rand_n]");
?>

これでまったく同じ挙動をするはずですw
別途テキストファイルを用意します。

data1.txt
<a href="​http://hogehoge.com"><img​ src="​http://hogehoge.com/image6.gif"​ alt="バナー1" width="200" height="200" /></a>
<a href="​http://hogehoge.com"><img​ src="​http://hogehoge.com/image4.gif"​ alt="バナー5" width="500" height="200" /></a>

-data.txt--
タグ1
タグ2
タグ3
タグ4

のように1行で1データ入れてください^^


重複を許さずにとる場合は
<?php
$fn="data2.txt";
$af=file($fn);
$row=count($af);
$hyoji=array_rand($af,3) // 4つなら array_rand($af,4);
for($i=0;$hyoji[$i];$i++)
{
echo "$hyoji[$i]";
}
?>

<タグ>

この回答への補足

data.txtの​?​がいらなかったようでその部分を消したら画像が出てきました☆^^
しかし何回かリロードを繰り返すと画像を読み込まない時があり画像が表示されません。
test2.phpのエラーについてはいまだに原因がわかりませんが自分なりになんとか試行錯誤してみます^^;

補足日時:2007/06/23 22:33
    • good
    • 0
この回答へのお礼

ありがとうございます。私自身phpに覚えがないもので質問のソースは
サンプルを基にしていましたがwidowwさんの方法がスッキリしているのでそちらを使わせて頂きたいと思います。

早速参考にtest1.phpには、widowwさんの方法をそのまま記述し

test2.phpには
<?php
$fn="data2.txt";
$af=file($fn);
$row=count($af);
$hyoji=array_rand($af,3) // 4つなら array_rand($af,4);
for($i=0;$hyoji[$i];$i++)
{
echo "$hyoji[$i]";
}
?>

data1,data2のtxtを作成し
その中に一行記述でdata1.txtには
<a href="​?http://hogehoge.com"><img​? src="​?img/banner1.gif"​? alt="バナー1" width="500" height="200" /></a>
<a href="​?http://hogehoge.com"><img​? src="​?img/banner2.gif"​? alt="バナー2" width="500" height="200" /></a>
<a href="​?http://hogehoge.com"><img​? src="​?img/banner3.gif"​? alt="バナー3" width="500" height="200" /></a>

としdata2.txtには
<a href="​?http://hogehoge.com"><img​? src="​?img/banner4.gif"​? alt="バナー4" width="200" height="200" /></a>
<a href="​?http://hogehoge.com"><img​? src="​?img/banner5.gif"​? alt="バナー5" width="200" height="200" /></a>
<a href="​?http://hogehoge.com"><img​? src="​?img/banner6.gif"​? alt="バナー6" width="200" height="200" /></a>
としました。

index.phpには
<div>
<?php
require("test1.php");
?>
</div>

<div>
<?php
require("test2.php");
?>
</div>
としたのですが画像が表示されませんでした。

test2.phpの方には以下のようなエラーがでます。
Parse error: syntax error, unexpected T_FOR in サーバーのパスtest2.php on line 6
画像のパスを変えたりしてみたのですが結果は変わらずで何が原因なのかはわかりませんでした・・・
どのようにしたらいいでしょうか?お手数お掛けしますが宜しくお願い致します。

お礼日時:2007/06/23 21:09

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