如何不使用额外数组删除数组重复项并生成带颜色星期表格
解决数组去重(无额外数组)+ 日期颜色匹配的问题
嘿,你的思路很靠谱——用布尔值判断重复、Switch Case分配颜色,刚好能完美契合需求!我把这些想法落地成可运行的代码,一步步帮你拆解实现过程:
一、不使用额外数组的去重逻辑
你提到不想用新数组存结果,那我们有两种方式实现:
方式1:手动用布尔值+if判断(完全贴合你的想法)
通过嵌套循环+布尔标记,直接在原数组上移除重复项,不需要额外创建结果数组:
// 原始输入(修正了最后一个拼写小错误,把mercoledi改成mercoledì) $originalDays = explode(',', 'lunedì,mercoledì,lunedì,mercoledì'); $length = count($originalDays); // 遍历数组,标记并移除重复项 for ($i = 0; $i < $length; $i++) { $isDuplicate = false; // 检查当前元素之前的所有元素是否重复 for ($j = 0; $j < $i; $j++) { if ($originalDays[$i] === $originalDays[$j]) { $isDuplicate = true; break; } } // 如果是重复项,从原数组中删除 if ($isDuplicate) { array_splice($originalDays, $i, 1); $length--; // 数组长度变化,调整循环索引 $i--; } } // 此时$originalDays就是去重后的数组 $uniqueDays = $originalDays;
方式2:利用PHP数组键的唯一性(更简洁)
PHP数组的键是唯一的,我们可以通过翻转数组(值变键,自动覆盖重复值)再翻转回来实现去重,全程不用手动创建新数组:
$originalDays = explode(',', 'lunedì,mercoledì,lunedì,mercoledì'); // 先翻转数组去重,再用array_values重置索引 $uniqueDays = array_values(array_flip($originalDays));
二、用Switch Case匹配日期颜色
接下来给每个星期几分配对应颜色,写个专用函数更清晰:
function getDayColor($day) { switch(strtolower($day)) { case 'lunedì': case 'monday': return '#ffcccc'; // 浅红色(周一) case 'mercoledì': case 'wednesday': return '#ffffcc'; // 浅黄色(周三) // 其他日期可以按需扩展 case 'martedì': case 'tuesday': return '#ffe6cc'; // 浅橙色(周二) default: return '#ffffff'; // 默认白色 } }
三、完整HTML+CSS+PHP实现
把上面的逻辑整合,生成带颜色的结果表格:
<!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <title>Giorno Settimanale Unico con Colore</title> <style> table { border-collapse: collapse; margin: 20px 0; font-family: Arial, sans-serif; } th, td { border: 1px solid #ddd; padding: 8px 15px; text-align: left; } th { background-color: #f2f2f2; font-weight: bold; } </style> </head> <body> <?php // 原始输入 $input = 'lunedì,mercoledì,lunedì,mercoledì'; $originalDays = explode(',', $input); // 用布尔值+if手动去重(无额外数组) $length = count($originalDays); for ($i = 0; $i < $length; $i++) { $isDuplicate = false; for ($j = 0; $j < $i; $j++) { if ($originalDays[$i] === $originalDays[$j]) { $isDuplicate = true; break; } } if ($isDuplicate) { array_splice($originalDays, $i, 1); $length--; $i--; } } $uniqueDays = $originalDays; // 颜色匹配函数 function getDayColor($day) { switch(strtolower($day)) { case 'lunedì': case 'monday': return '#ffcccc'; case 'mercoledì': case 'wednesday': return '#ffffcc'; default: return '#ffffff'; } } ?> <h3>去重后的星期几(意大利语+英语对应)</h3> <table> <tr> <th>意大利语</th> <th>英语</th> </tr> <?php foreach ($uniqueDays as $day): ?> <?php // 意大利语转英语映射 $englishDay = match(strtolower($day)) { 'lunedì' => 'Monday', 'mercoledì' => 'Wednesday', default => '' }; ?> <tr style="background-color: <?php echo getDayColor($day); ?>"> <td><?php echo $day; ?></td> <td><?php echo $englishDay; ?></td> </tr> <?php endforeach; ?> </table> </body> </html>
四、最终结果表格
当输入为lunedì,mercoledì,lunedì,mercoledì时,生成的表格如下(带对应背景色):
| 意大利语 | 英语 |
|---|---|
| lunedì | Monday |
| mercoledì | Wednesday |
内容的提问来源于stack exchange,提问作者Adrenerg1co
相关产品推荐
相关产品推荐

