【问题标题】:Multiple random images per page, without repeat每页多张随机图片,不重复
【发布时间】:2016-06-15 11:05:50
【问题描述】:

因此,我需要在网站中显示 2 或 3 张不同的图像,作为内容的简单视差分隔符。

我有一个包含 4 张图片的数组,所以我可以在同一页面中随机化而不重复它们,尽管随机性不会那么明显。

我已经潜伏了一段时间,找到了这些

Random Image Display, Without Repeat, with Javascript

<script language="javascript">
    var imagesArray = [
        'images/img-1.jpg',
        'images/img-2.jpg',
        'images/img-3.jpg',
        'images/img-4.jpg',
        'images/img-5.jpg',
    ];

    var usedImages = {};
    var usedImagesCount = 0;

    function displayImage() {

        var num = Math.floor(Math.random() * (imagesArray.length));
        if (!usedImages[num]) {
            document.canvas.src = imagesArray[num];
            usedImages[num] = true;
            usedImagesCount++;
            if (usedImagesCount === imagesArray.length) {
                usedImagesCount = 0;
                usedImages = {};
            }
        } else {
            displayImage();
        }
    }
</script>

(这是为了在单击按钮时显示图像而创建的,如下所示

<input onclick="displayImage();" type=button value="Click Here">

我试图调整它以适应我的需要,但我页面上的调用没有产生任何结果)

https://www.daniweb.com/programming/web-development/threads/266181/random-imageslinks-without-repeating

(这个,我不太明白为什么,但我无法应用解决方案。不确定是代码错误还是调用图像的方式错误......)

http://www.utopiamechanicus.com/article/not-so-random-image-rotation-in-php-for-html-the-sequel/

<?php
    // rotate images randomly but w/o dups on same page - format:
    // <img src='rotate.php?i=0'> - rotate image #0 - use 'i=1'
    // for second, etc
    // (c) 2004 David Pankhurst - use freely, but please leave in my credit
    $images = array(// list of files to rotate - add as needed
        "img1.gif",
        "img2.gif",
        "img3.gif",
        "img4.gif",
        "img5.gif");
    $total = count($images);
    $secondsFixed = 10; // seconds to keep list the same
    $seedValue = (int) (time() / $secondsFixed);
    srand($seedValue);
    for ($i = 0; $i < $total;  ++$i) { // shuffle list 'randomly'
        $r = rand(0, $total - 1);
        $temp = $images[$i];
        $images[$i] = $images[$r];
        $images[$r] = $temp;
    }
    $index = (int) ($_GET['i']); // image index passed in
    $i = $index % $total; // make sure index always in bounds
    $file = $images[$i];
    header("Location: $file"); // and pass file reference back
?>

(这个应该可以通过调用来工作:

<img src='mysite.com/rotate.php?i=0'>

但图像有时仍会重复)

它们对我不起作用,所以我决定开始一个新话题,因为我真的是 javascript 的新手(实际上,我什么都不知道),并且不知道什么是最好的方法。我知道这类似于随机化项目,为每个项目分配一个位置(一个数字、一个字符、一个 [i] 等),然后在我的 php 页面中调用它。大家能帮帮我吗?

【问题讨论】:

  • I don't know writing nothing at all 这不是一个教程网站。
  • 所有这些例子有什么问题,你还需要什么?
  • 对不起。关于我的需求,我现在已经清理了一切。我不是要求某人从 a,b,c 教授(虽然这是我需要的,但是是的,这不是一个教程网站,一切都有自己的时间和地点),只是为了帮助我适应那些我需要的解决方案。
  • 所以你想要 php,而不是 javascript?
  • @mitkosoft 实际上并不重要。如果 Javascript 产生了我需要的东西,并且我能够在我想要的任何位置调用网站上的图像,我可能会使用 Javascript。只是这是我知道的语言较少,但如果有人帮助我到达我需要的地方......没问题! :) 很难用语言表达我的需求,因为我不知道到达那里的最佳方式,但我只需要随机化一些图像,然后调用它们而不在同一页面上重复它们。

标签: javascript php image random


【解决方案1】:

不确定您是否想要,但这会在页面上为您提供随机图像(不重复),每次都不同:

<?php
    $img = array('img1.png', 'img2.png', 'img3.png', 'img4.png', 'img5.png', 'img6.png');
    shuffle($img);
    for($i=0; $i<3; $i++){
        print '<img src="'.$img[$i].'"><br>';
    }
?>        

如果您希望每次通话接收一张图片,一种可能的解决方案是使用会话:

image.php:

<?php
    session_start();
    function getImage() {
        $img = array('img1.png', 'img2.png', 'img3.png', 'img4.png', 'img5.png');
        shuffle($img);
        foreach($img as $key => $val) {
            if (!is_array($_SESSION['img'])) {
                return $val;
            } elseif (count($_SESSION['img']) >= count($img)) {
                $_SESSION['img'] = array();
            }
            if (is_array($_SESSION['img']) && !in_array($val, $_SESSION['img'])) {
                return $val;
            }
        }
    }
?>

page.php:

<?php
    include 'image.php';
    for ($i = 0; $i < 3; $i++) {
        $currImg = getImage();
        $_SESSION['img'][] = $currImg;
        echo $currImg . '<br>';
    }
?>

所有显示的图像都存储在 SESSION 变量中。当显示所有图像时,此 SESSION 变量将被重置并开始新的循环。

【讨论】:

  • 非常感谢!但问题是,你的脚本在我的页面上生成了 3 张图片,我把它放在那里。我需要的是每次调用生成 1 张图像,不会在同一页面上重复之前的任何图像。 p.s.:非常感谢您的耐心和帮助
  • 不确定是否正确应用了代码所以。
  • 我已经使用SESSION 变量设置了第二个选项,请检查它。这种方法也适用于多页,只需在每个页面的最顶部包含 image.php 就足够了。
  • 非常感谢您的帮助!但是我想我不能再申请了,我真的很抱歉。我应该创建一个名为 image.php 的新页面,他们在我想渲染图像的任何地方使用该代码 page.php,对吗?如果是,我收到错误“警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送(输出开始于 /home/iguacusustentabilidade/www/cursos-e-treinamentos.php: 99) 在 /home/iguacusustentabilidade/www/divs.php 第 2 行'
  • 所以我尝试将它放在页面顶部,然后它以文本形式呈现我的图像文件的 3 个路径。因此,经过一些试验,我能够在页面顶部使用部分代码,包括页面,然后调用以在我想要的位置渲染图像,但同样,一旦我使用了多个调用页面,有时会重复。我真的很抱歉,但你能详细说明如何应用这些代码吗?因为我知道您的代码实际上是正确的,但我没有正确应用它。
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 2013-02-01
  • 2011-08-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多