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

遍历含国家城市的多维数组,生成带rowspan的HTML表格遇问题求助

问题解决:生成带合并单元格的国家城市表格

首先看你的原始数组结构:

$countries = [
    'France' => [
        ['city' => 'Paris']
    ],
    'Canada' => [
        ['city' => 'Montreal'],
        ['city' => 'Ottawa']
    ]
];

你期望生成的表格效果是:

Country Cities
France Paris
Canada Montreal
Ottawa

你当前代码的核心问题有两个:

  • 错误计算了城市数量:count($country)是对国家名称(字符串)计数,永远返回1,应该对每个国家对应的城市数组计数,也就是count($city)
  • 没有正确遍历城市数组:$city是包含多个城市的数组,不能直接echo,需要循环取出每个城市的city字段

下面是修复后的完整代码,逻辑更清晰,变量名也做了优化避免混淆:

// 先输出表格头部
echo '<table>';
echo '<thead><tr><th>Country</th><th>Cities</th></tr></thead>';
echo '<tbody>';

foreach($countries as $countryName => $cities) {
    $cityCount = count($cities);
    $isFirstCity = true;
    
    foreach($cities as $cityItem) {
        echo '<tr>';
        // 只有第一个城市的时候输出带rowspan的国家单元格
        if ($isFirstCity) {
            echo '<td rowspan="' . $cityCount . '">' . $countryName . '</td>';
            $isFirstCity = false;
        }
        // 输出城市名称
        echo '<td>' . $cityItem['city'] . '</td>';
        echo '</tr>';
    }
}

echo '</tbody></table>';

这段代码的逻辑是:

  • 外层循环遍历每个国家和对应的城市列表
  • 先获取当前国家的城市总数,用于设置rowspan的值
  • 内层循环遍历每个城市:第一个城市时输出国家名称并设置rowspan,后续城市只输出城市列,这样就实现了国家单元格的合并效果
  • 变量名用$countryName和$cities、$cityItem,比原来的$country、$city更清晰,避免歧义

内容的提问来源于stack exchange,提问作者user4440254

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:06:53