5

ウェブページにいくつかのバナーを表示する必要があります。バナーの数は10個(最大10個)になります。データベース内のバナー数と各バナーフォルダを設定できます。バナー画像は、カテゴリに基づいて個別のサーバーフォルダに保存されます。バナーが列に表示されています。

私のコードは、ここでは、long1、long2、...long10はデータベースからのディレクトリ名です

 $array=array();
       for($n=1;$n<=$long;$n++)
       {
       $files = array();
       $dir=${'long'.$n};

               if(is_dir($dir))
              {
               $openDir = opendir($dir);
                       while (false !== ($file = readdir($openDir)))
                       {
                               if ($file != "." && $file != "..")
                               {
                                       $files[] = $file;
                               }
                       }
               closedir($openDir);
               }


mt_srand((double) microtime()*1000000);
 $randnum = mt_rand(0,(sizeof($files)-1));

 $arraycount=count($array);
for($index=0;$index<=$arraycount;$index++)
 {
 if(!in_array($array,$randnum))
     {
      $array[]=$randnum;
     }

 }

 $img = $dir."/".$files[$randnum];

  <input type="image" class="advt_image" src="<?=$img;?>" alt="" name=""/>
 }

例:データベースに7つのバナーが設定されている場合、異なるまたは同じフォルダーから7つのバナーを表示する必要があります(一部のバナーは同じフォルダーからのものになります)。Webページを表示するたびにバナーが重複しないようにする必要があります。

各乱数を格納する配列を割り当てました。コード内で何かを変更する必要がありますか?何か考え/アイデアはありますか?

ありがとう!

4

3 に答える 3

1

ループ内の$files配列から表示されている画像を削除できます。これは、ループ内の配列の長さもチェックする必要があることを意味します。あなたはarray_diffこれに使うことができます。

$files = array(...); // this holds the files in the directory
$banners = array();  // this will hold the files to display
$count = 7;
for($i=0;$i<$count;$i++) {
    $c = mt_rand(0,count($files));
    $banners[] = $files[$c];
    $files = array_diff($files, array($files[$c]));
}

// now go ahead and display the $banners
于 2012-06-28T08:04:56.057 に答える
1
  1. バナー ID を配列に配置します。それぞれ1回発生します
  2. Knuth shuffleを使用してこの配列をシャッフルします
  3. HTML 出力の最初の 10 個を出力する
于 2012-06-28T07:05:29.733 に答える
0

この問題を解決する簡単な方法は、バナーを表示する前よりも、バナーのリストを保持する配列を作成することです。

私はあなたのコードを読んでいませんでした(申し訳ありません)が、これが可能な基本的な概念です。

$bannerList = array();

//Now, check if the list contains the banner before adding it
while($rows) { //your big list of banners

    if(!in_array($rows['bannerpath'])) {
        $bannerList[] = $rows['bannerpath'];
    }

}
于 2012-06-28T07:08:05.910 に答える