PHP实现网站列表表格域名去重,仅随机显示单域名条目
解决PHP网站表格域名重复问题:每个域名仅随机显示一条记录
我来帮你搞定这个同域名重复展示的问题!核心思路很简单:先把所有网站按域名分组,然后从每个域名组里随机挑一条记录出来,这样就能保证每个域名只会出现一次,而且每次刷新都是随机的条目。
下面是修改后的完整代码,我会一步步解释逻辑:
<?php // 假设这是你从后台获取的网站数据(实际项目中替换成你的数据源) $websites = [ ['link' => 'https://yahoo.com/news', 'name' => 'Yahoo News,Yahoo Headlines'], ['link' => 'https://yahoo.com/mail', 'name' => 'Yahoo Mail,Yahoo Inbox'], ['link' => 'https://google.com/search', 'name' => 'Google Search,Google Web'], ['link' => 'https://google.com/maps', 'name' => 'Google Maps,Google Locations'], ]; // 第一步:按域名分组所有网站 $groupedWebsites = []; foreach ($websites as $website) { // 提取域名,用@抑制解析错误(比如无效链接) $domain = @parse_url($website['link'])['host']; // 只处理能解析出域名的条目 if ($domain) { $groupedWebsites[$domain][] = $website; } } // 第二步:每个域名随机选一条记录 $uniqueDomainWebsites = []; foreach ($groupedWebsites as $domainEntries) { // 随机选一个组内的条目索引 $randomIndex = array_rand($domainEntries); $uniqueDomainWebsites[] = $domainEntries[$randomIndex]; } // 可选操作:打乱最终结果的顺序,避免域名按字母排序展示 shuffle($uniqueDomainWebsites); ?> <!-- 输出表格部分 --> <table border="1"> <thead> <tr> <th>网站名称</th> <th>链接</th> <th>域名</th> </tr> </thead> <tbody> <?php foreach ($uniqueDomainWebsites as $website): ?> <?php // 保留你原来的随机名称逻辑:逗号分隔多值随机选一个 $nameList = explode(',', $website['name']); $randkey = trim($nameList[array_rand($nameList)]); $domain = @parse_url($website['link'])['host']; ?> <tr> <td><?= $randkey; ?></td> <td><a href="<?= $website['link']; ?>" rel="noopener noreferrer"><?= $website['link']; ?></a></td> <td><?= $domain; ?></td> </tr> <?php endforeach; ?> </tbody> </table>
关键逻辑说明:
- 域名分组:通过遍历原数据,把同一个域名下的所有网站条目归到一起,这样我们就能对每个域名单独处理。
- 随机选条:对每个域名组,用
array_rand随机挑选一条记录,确保每个域名只会出现在最终列表里一次。 - 容错处理:加了
if ($domain)判断,跳过那些无法解析出域名的无效链接,避免出现空域名的条目。 - 保留原有功能:完全保留了你原来的随机名称选取逻辑,逗号分隔的名称依然会随机展示其中一个。
这样修改后,每次运行代码时,每个域名只会随机显示一条对应的条目,再也不会出现重复的域名啦!
内容的提问来源于stack exchange,提问作者Ahmed Elzelaky
相关产品推荐
相关产品推荐

