假设我有30张图片。和3种尺寸,"小","中","大"。
我想以随机顺序输出所有 30 张图像,并给出一个随机大小类,小/中和大。
目前是这样的
$random = array("small", "medium", "large");
$images_array = *ALL IMAGES HERE*
shuffle($images_array);
foreach($images_array as $image){ ?>
<div class="box <?php echo $random[rand(0, count($random) - 1)]; ?>"><img src="<?php echo $image; ?>" /></div>
<?php } ?>
一切正常,我确实得到了随机课程。但!
如何更改此设置,以便为大型类设置最大数量?我希望大的只出现四次。
只需创建一个包含 30 个值的数组,其中 4 个是"large"
值,其余是 "small"
和 "medium"
的随机组合。这个数组,当洗牌时,会给你你想要的结果。
<?php
$random = array("large", "large", "large", "large");
for ($i = 0; $i < 26; $i++) {
$random[] = (rand(1, 2) == 1) ? "small" : "medium";
}
$images_array = *ALL IMAGES HERE*
shuffle($random);
shuffle($images_array);
foreach ($images_array as $key => $image) {
echo '<div class="box '.$random[$key].'"><img src="'.$image.'" /></div>';
}
?>
<?php $large = 0;
foreach($images_array as $image){
$class = $random[rand(0, count($random) - 1)];
if ($class == 'large') {
$large++;
if ($large > 4)
$class = $random[rand(0, count($random) - 2)];
}
echo '<div class="box ' . $class .'"><img src="' . $image . '" /></div>';
} ?>
您可以简单地使用 $counter
变量来计算large
值被使用的次数。而且,如果超过,只需再次随机化该值。
<?php
$random = array("small", "medium", "large");
$images_array = *ALL IMAGES HERE*
shuffle($images_array);
$counter = 0;
foreach($images_array as $image){ ?>
$rand = rand(0, $counter > 3 ? 1 : 2);
if ($rand == 2) $counter++; // corresponds to `large`
echo '<div class="box ' . $random[$rand] .'"><img src="'. $image .'" / </div>';
}