0

我的php知识有限,如果答案很明显,很抱歉。

单击链接时,我正在使用 .rand 函数显示来自 3 个页面之一的随机图像。这些页面的名称都相同,并且位于不同的文件夹(页面、媒体、文本)中。我遇到的问题是我每次都想要组合 3 个不同的页面/图像,但每次都以相同的 3 个页面/图像组合出现。我想要这个,例如 Page1、Media2、Text1。下一步... Page3、Media2、Text3。下一步... Page1、Media3、Text2。

相反,它会出现,例如 Page1、Media1、Text1。下一步... Page3、Media3、Text3。下一个... Page2、Media2、Text2。

解决方案可能很简单,但我似乎无法弄清楚。

这是我的代码:

<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

您只使用了一次函数“rand()”,因此您将只有一个随机数。如果您想要更多数字,请多次使用该功能。例如 :

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

他们每个人都可能产生一个唯一的数字;)

于 2013-06-24T21:02:15.400 回答
0

您在这里只使用一次 rand:

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

有两种解决方案:

  • 不要使用 rand 作为 GET 参数,只需在设置 $_GET['p'] 时生成随机数。

  • 创建另外两个 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 回答