【问题标题】:Fetch images randomly from directory?从目录中随机获取图像?
【发布时间】:2017-02-23 11:48:47
【问题描述】:

我对 PHP 还不是很精通,而且我有这段代码,目前可以使用。

<?php 
$id = JRequest::getInt('id');
$dirname = "media/k2/galleries/{$id}/";
$images = glob($dirname."*.jpg");
$rand = array_rand($dirname);
?>
<?php foreach($images as $image): ?>

<li><span class="shadowborder"><img src="<?php echo $image ?>" /></span>    </li>
 <?php endforeach; ?>

我试图添加一个数组,我知道 $images 和 $image 应该被换掉,但是正如你所看到的,但我无法将它凝胶化,我错过了什么?谢谢!

【问题讨论】:

  • 你必须获取所有并创建数组然后你可以随机获取它们。
  • 你想达到什么目的?以随机顺序显示图片?
  • 是的,获取目录下的所有图片,然后随机一张一张显示。上面的代码有效,但它按文件名显示。所以从字面上看,我需要添加随机函数。
  • 我添加了 $rand = array_rand($dirname);但到目前为止它还没有被使用。而且我显然省略了包装 UL 标签。

标签: php image random


【解决方案1】:

您可以为此使用shuffle:

$id = JRequest::getInt('id');
$dirname = "media/k2/galleries/{$id}/";
$images = glob($dirname."*.jpg");
shuffle($images);
?>
<?php foreach($images as $image): ?>

<li><span class="shadowborder"><img src="<?php echo $image ?>" /></span>    </li>
 <?php endforeach; ?>

【讨论】:

  • 这么简单,有什么缺点吗?
  • shuffle 唯一的缺点是它不维护密钥。
  • 但它会继续并使用相同的洗牌顺序重复,还是会继续洗牌?
  • @user3206244 每次都会产生一个新的随机订单。很可能不会一样。
  • 足够用了 - 感谢堆栈!一行,完成.. 我仍在学习如何利用数组等,但包括 php 有点棘手 - 非常感谢
【解决方案2】:

您可以使用“Glob”功能与array_rand() 合作实现此目的:

<img src="
    <?php
        $id = JRequest::getInt('id');
        $imagesDir = 'media/k2/galleries/{$id}/';
        $images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
        $randomImage = $images[array_rand($images)];
        echo $randomImage;
    ?>
">

您可以通过更改(添加/删除)这部分来修改“允许”哪些文件类型:
'*.{jpg,jpeg,png,gif}


如有任何其他问题,请随时提出。

【讨论】:

  • 谢谢大家!使用 glob 和 array_rand 与仅在 $images 上随机播放有什么区别?
  • 我读到了关于使用 array_rand 的文章,它保留了数组索引并随机选择一个索引,而 shuffle 实际上重新排序索引并选择一个。但肯定会在重新排序的索引上继续随机?
猜你喜欢
  • 2017-05-01
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 2019-04-16
相关资源
最近更新 更多