こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

よく使われてるPHPランダム広告について。

よく使われてる(ネット上で見かける)PHPランダム広告についてですが、

// 初期化
srand((double)microtime()*1000000);

$ad_list1 = file($absolute_path."/modules/ads/ads_01.txt");
$ad_key1 = array_rand($ad_list1, 2);

// 広告の表示
$ad1 = $ad_list1[$ad_key1[0]];

1.現在でも、srand関数を使う必要がありますか?
2.広告の表示は1つなのですが、array_rand($ad_list1, 2);の変数以外の部分の引数を1もしくは、何も書かない場合は広告が表示しないのは、何故なのでしょうか。2を書かないとだめで。。。

ちなみに、ads_01.txtの内容は、2行。
<a href=""><img src="" alt="" /></a>
<a href=""><img src="" alt="" /></a>
(""の内容は省略しています。)

色々調べたり、試しましたが、Xでした。。。

みなさん、ご回答いただければと思います。
よろしくお願いいたします。

投稿日時 - 2011-05-12 11:02:39

QNo.6731877

すぐに回答ほしいです

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

1.現在でも、srand関数を使う必要がありますか?

php4.2.0からランダム生成器の初期化は必要なくなった気がします。
まぁあっても問題ないと思うのでいいと思います。

2.広告の表示は1つなのですが、array_rand($ad_list1, 2);の変数以外の部分の引数を1もしくは、何も書かない場合は広告が表示しないのは、何故なのでしょうか。2を書かないとだめで。。。

array_randの引数に2を指定しないとダメなのではなく

$ad1 = $ad_list1[$ad_key1[0]];

ここに問題があるのではないでしょうか?

仮に
$ad_key1 = array_rand($ad_list1);とした場合に
$ad_keyの中身は配列ではなく単にどちらかひとつが格納されてる状態です。

その状態で
$ad1 = $ad_list1[$ad_key1[0]];
とやってしまうと
$ad_key1は配列じゃないのでエラーになります。

けれど
$ad_key1 = array_rand($ad_list1,2); とすれば
$ad_key1は二つの値が配列として格納されますので表示されます。

ですので単純に
-------------------------------------------------------------
srand((double)microtime()*1000000);

$ad_list1 = file($absolute_path."/modules/ads/ads_01.txt");
$ad_key1 = array_rand($ad_list1);

echo $ad_list1[$ad_key1];
--------------------------------------------------------------
とすれば正常に動作するのではないでしょうか?

投稿日時 - 2011-05-12 13:01:18

お礼

質問について、的確な回答、とてもわかりやい回答でした。ありがとうございました。

投稿日時 - 2011-05-13 12:35:18

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問