【问题标题】:10 random images with glob() from 1000+ images来自 1000 多张图片的 10 张带有 glob() 的随机图片
【发布时间】:2013-02-01 13:38:15
【问题描述】:

我有一个包含 1000 多个图像和一段代码(由 codaddict 编写)的目录,它只选择前 10 个并显示它:

<?php
foreach (array_slice(glob("/directory/*.jpg"),0,10) as $path)
?>

这行得通,但我需要选择 10 个随机图像,而不是前 10 个

是的,我可以先使用 shuffle,然后再使用 slice,但是对于 1000+(或 10k+)张图像,只为 10 张图像随机播放长数组并不明智,或者可能是这样?

另外,第二个问题是这不仅仅是一个包含 1000 多张图片的文件夹,我也需要在其他文件夹中使用这个脚本,其中一些只有一张图片,所以我不想看到如果文件夹中的图片少于 10 张,则会出错

我在 php 手动代码中看到了 2 个随机项目,但我不知道文件夹中有多少图像 - 1、10、10k...你看到了问题

<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
?>

谢谢!

【问题讨论】:

  • 是时候为图像管理考虑数据库解决方案了 - 具有 10k+ 文件的目录设计速度很慢
  • 这个问题有一个 PHP 数组函数的大 O 值列表。或许可以帮到你:stackoverflow.com/questions/2473989/…
  • 只有少数目录有超过 1k 的图像,大部分它们将包含大约 100 个图像,但是因为我会为 100 或 1000 个图像使用相同的代码,所以我认为 shuffle int 很棒,100 是好的,但 1000 不是 :)

标签: php shuffle glob slice


【解决方案1】:
function imageGlobber($myDir, $imgCount) {
    $globVar = glob($myDir."/*.jpg");
    $imgCount = ($imgCount > count($globVar)) ? $imgCount : count($globVar);

    $randKeys = array_rand($globVar, $imgCount);

    $retArray = array();
    foreach($randKeys as $key)
        array_push($retArray, $globVar[$key]);

    return $retArray;
}

我想这就是你要找的。​​p>

编辑:也添加了重复处理。

编辑:提高性能。

【讨论】:

  • 这只是一个骨架代码。我这里没有做任何错误处理,或者重复处理。
  • 好的,所以现在不会选择任何重复的图像。
  • 好的,谢谢你的代码,但是我在哪里可以设置 10 张图片的限制?我在代码中没有看到:\
  • @Philipp 不是。只有当数组中有正确数量的唯一元素时,while 循环才会中断。
  • @Sunny 你应该能弄清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2019-06-26
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
相关资源
最近更新 更多