欢迎您访问新疆栾骏商贸有限公司,公司主营电子五金轴承产品批发业务!
全国咨询热线: 400-8878-609

新闻资讯

技术学院

如何在 PHP 循环中区分首项、中间项与末项并分别渲染

作者:霞舞2025-12-25 00:00:00

本文介绍如何在 php `foreach` 循环中精准识别数组的首项、中间项(前 n 项)和末项,并将它们分别输出到不同 html 结构中,适用于日历表头等场景。

在构建日历或表格类 UI 时,常需对数组元素做差异化渲染:例如,将一周七天中的前六天(周一至周六)放入

中,而将最后一天(周日)单独包裹在另一个 容器内。原代码使用简单 foreach,无法区分位置,因此需借助 PHP 的键值控制能力。

自 PHP 7.3 起,array_key_first() 和 array_key_last() 函数提供了安全、高效获取首尾键的方法。结合 $key => $val 的遍历语法,即可实现精准定位:

$daysOfWeek = ['Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche'];
$calendar = '';

foreach ($daysOfWeek as $key => $day) {
    if ($key === array_key_first($daysOfWeek)) {
        // 首项(Lundi)——可选处理,此处暂不特殊渲染
        $calendar .= "$day";
    } elseif ($key === array_key_last($daysOfWeek)) {
        // 末项(Dimanche)→ 单独放入 div
        $calendar .= "$day";
    } else {
        // 中间项(Mardi ~ Samedi)→ 前6项中的其余5项 + 实际需求可扩展
        $calendar .= "$day";
    }
}

⚠️ 注意事项:

  • array_key_first() / array_key_last() 要求 PHP ≥ 7.3;若环境低于此版本,可用 key($arr) + end($arr); key($arr) 替代(注意重置内部指针);
  • 上述逻辑默认“末项即单独处理”,若明确要求「仅前6项用 ,第7项强制进 」,更稳妥的方式是结合 count() 和索引判断:
    $limit = 6;
    foreach ($daysOfWeek as $key => $day) {
        if ($key < $limit) {
            $calendar .= "$day";
        } else {
            $calendar .= "$day";
        }
    }

    该方式不依赖键类型(尤其适合数字索引数组),语义清晰,兼容性更好,推荐在多数业务场景中采用。最终生成的 HTML 结构语义明确、易于样式定制与无障碍访问。