PHP .rand函数,

时间:2013-06-24 20:57:15

标签: php

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

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

相反,它出来了 例如 Page1,Media1,Text1。下一个... 第3页,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>

3 个答案:

答案 0 :(得分:0)

你只使用了一次“rand()”功能,所以你只需要一个随机数。如果您想要更多数字,请多次使用该功能。例如:

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

每个人都可以产生一个唯一的数字;)

答案 1 :(得分:0)

你只在这里使用rand一次:

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

有两种解决方案:

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

  • 创建另外两个GET参数,例如。媒体的$ _GET ['m'],内容的$ _GET ['c']并用它们替换$ _GET ['p']。

答案 2 :(得分: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的数组一样长。