如何实现9个无重复随机客户Logo网格?PHP代码问题求助
问题解决:随机展示9个无重复客户Logo
你的代码出现重复的原因是使用array_rand()随机选取元素时,可能多次命中同一元素——即便有in_array()判断,这种方式不仅效率低,还可能因随机概率问题出现重复(极端场景下)。更可靠的方式是利用数组打乱后直接截取前9个元素,因为打乱后的数组元素顺序完全随机,且天然无重复。
修改后的代码
<?php $clients = $_w->page->get_field('clients'); // 先打乱客户数组,确保顺序随机 shuffle($clients); ?> <?php if ($clients): ?> <section class="image-grid-container"> <script id="hd_client_gallery" type="text/json"> [<?php $total = count($clients); $count = 0; foreach ($clients as $c): echo "{"; echo '"url": "' . $c->image->url . '",'; echo '"href": "' . $c->link. '"'; echo "}"; if(++$count !== $total) { echo ", "; } endforeach; ?>] </script> <ul class="object image-grid gallery"> <?php // 截取打乱后的前9个客户,直接循环输出 $randomClients = array_slice($clients, 0, 9); foreach ($randomClients as $c): ?> <li> <a <?= ($c->link ? 'href="'.$c->link.'"' : '' ); ?>> <img class="img-fluid" src="<?= $c->image->url; ?>" /> <img style="display:none;" class="img-fluid" src="" /> </a> </li> <?php endforeach; ?> </ul> </section> <?php endif; ?>
关键修改点
- 移除了冗余的
usedImages数组和while循环逻辑,改用array_slice()直接从打乱后的数组中取前9个元素,确保无重复且随机。 - 保留了原有的全客户JSON输出,不影响其他功能。
- 代码逻辑更简洁,执行效率更高,彻底避免重复问题。
内容的提问来源于stack exchange,提问作者Mediaweeze
相关产品推荐
相关产品推荐

