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

如何不使用额外数组删除数组重复项并生成带颜色星期表格

解决数组去重(无额外数组)+ 日期颜色匹配的问题

嘿,你的思路很靠谱——用布尔值判断重复、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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:32:14