0

私のphpの知識は限られているので、答えが明らかである場合は申し訳ありません.

リンクがクリックされたときに .rand 関数を使用して、3 つのページのいずれかからランダムな画像を表示しています。ページはすべて同じ名前で、異なるフォルダー (ページ、メディア、テキスト) にあります。私が抱えている問題は、毎回3つの異なるページ/画像の組み合わせが必要ですが、代わりに毎回同じ3つのページ/画像の組み合わせとして表示されることです。私はこれが欲しい、例えばPage1、Media2、Text1。次... Page3、Media2、Text3。次... ページ 1、メディア 3、テキスト 2。

代わりに、Page1、Media1、Text1 などが出てきます。次... Page3、Media3、Text3。次... ページ 2、メディア 2、テキスト 2。

解決策はおそらく簡単ですが、私はそれを理解できないようです。

ここに私のコードがあります:

<body>
<div id="wrapper">
  <div id="click"><a href="index.php?p=<?php echo 'include-'.rand(1,3); ?>">CLICK HERE</a>></div>
  <div id="content">
    <?php 
    if (!empty($_GET['p'])) {
        $pages_dir = 'pages';
        $pages = scandir($pages_dir, 0);
        unset($pages[0], $pages[1]);

        $p = $_GET['p'];

        if (in_array($p.'.inc.php',$pages)) {
            include($pages_dir.'/'.$p.'.inc.php');
        }   else {
            echo 'Sorry, page not found.';
        }
  } 
  ?>
  </div>
  <div id="content2">
    <?php
    if (!empty($_GET['p'])) {
        $media_dir = 'media';
        $media = scandir($media_dir, 0);
        unset($media[0], $media[1]);

        $p = $_GET['p'];

        if (in_array($p.'.inc.php',$media)) {
            include($media_dir.'/'.$p.'.inc.php');
        }   else {
            echo 'Sorry, page not found.';
        }
  } 
  ?>
  </div>
   <div id="content3">
    <?php
    if (!empty($_GET['p'])) {
        $text_dir = 'text';
        $text = scandir($text_dir, 0);
        unset($text[0], $text[1]);

        $p = $_GET['p'];

        if (in_array($p.'.inc.php',$text)) {
            include($text_dir.'/'.$p.'.inc.php');
        }   else {
            echo 'Sorry, page not found.';
        }
  } 
  ?>
  </div>
</div>
</body>
4

3 に答える 3

0

関数「ran​​d()」を 1 回だけ使用したため、乱数は 1 つだけになります。より多くの数が必要な場合は、関数を複数回使用します。例えば ​​:

$rnd_1 = rand(0,3);
$rnd_2 = rand(0,3);
$rnd_3 = rand(0,3);

それらのそれぞれが一意の番号を生成する場合があります;)

于 2013-06-24T21:02:15.400 に答える
0

ここで rand を 1 回だけ使用します。

<a href="index.php?p=<?php echo 'include-'.rand(1,3); ?>">

次の 2 つの解決策があります。

  • $_GET['p'] が設定されている場合は、乱数を生成するだけで、GET パラメータとして rand を使用しないでください。

  • 別の 2 つの GET パラメータを作成します。$_GET['m'] はメディア用、$_GET['c'] はコンテンツ用で、$_GET['p'] をそれらに置き換えます。

于 2013-06-24T21:05:38.923 に答える
0

shuffle(glob('*.png'));、または単にshuffle();画像の配列を使用してみてください。見る:

http://php.net/manual/en/function.glob.php

http://php.net/manual/en/function.shuffle.php

glob 内の文字列は、任意のファイル拡張子に置き換えることができます。

コードは次のようになります。

$allPics = shuffle(glob('*png')); $pic = array_slice($allPics, 0, 3);

$pic[0]、あなたのイメージ$pic[1]$pic[2]保持します。

個人的には、3 つの画像を返すだけの場合は JavaScript を使用する必要があると思います。そのコードは次のようになります。

まず、外部の picloader.js ファイル:

//+ Jonas Raoni Soares Silva - Google
//@ http://jsfromhell.com/array/shuffle [v1.0]
function shuffle(o){ //v1.0
  for(var j,x,i=o.length; i; j=parseInt(Math.random()*i),x=o[--i],o[i]=o[j],o[j]=x);
    return o;
}
//everything else by Jason Raymond Buckley
function E(e){
  return document.getElementById(e);
}
function picLoader(clickId, outIdsArray, imageArray){
  E(clickId).onclick = function(){
    var oa = outIdsArray, il = oa.length, sh = shuffle(imageArray), pic = sh.slice(0, il);
    for(var i in oa){
      E(oa[i]).innerHTML = "<img src='"+pic[i]+"' />";
    }
  }
}

ページのコードは次のようになります。

<body>
  <div id="wrapper">
    <input type='button' value='CLICK HERE' id='showPics' />
    <div id="content"></div>
    <div id="content2"></div>
    <div id="content3"></div>
  </div>
  <script type='text/javascript' src='picloader.js'></script>
  <script type='text/javascript'>
    var imageArray = ['img1.png', 'img2.png', 'img3.png', 'img4.png', 'img5.png', 'img6.jpg', 'img7.jpg'];
    picLoader('showPics', ['content', 'content1', 'content2'], imageArray);
  </script>
</body>
</html>

imageArrayこれは、少なくとも出力コンテンツ ID を含む配列と同じ長さである限り、任意の量の出力要素に対して機能するはずです。

于 2013-06-24T21:06:02.367 に答える