You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现9个无重复随机客户Logo网格?PHP代码问题求助

你的代码出现重复的原因是使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:02:52