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

如何基于嵌套数组生成HTML表格并实现关联的国家选择表单?

完整实现方案

没问题,我帮你把这个需求拆成几个步骤来实现,既满足从嵌套数组生成HTML表格,又能通过国家筛选表单动态过滤内容。直接上代码和说明:

1. 先填充国家列表($countries数组)

首先咱们得从现有$cars数组里提取不重复的国家,这样表单的选择框才有动态选项,不用手动写死:

<?php
$cars = Array(
    Array("DDT","Detroit","USA", Array(
        Array("DDT-55555","1x1","100Hp"),
        Array("DDT-66666","2x2","200Hp"),
        Array("DDT-77777","3x3","300Hp"),
        Array("DDT-77777","4x4","400Hp")
    )),
    Array( "AMM","London","UK", Array(
        Array("AMM-888","6x6","500Hp")
    )),
);

// 提取不重复的国家列表到$countries
$countries = [];
foreach ($cars as $carBrand) {
    $country = $carBrand[2];
    if (!in_array($country, $countries)) {
        $countries[] = $country;
    }
}
?>

2. 构建国家筛选表单

接下来做带country选择框的表单,提交到当前页面,并且记住用户选择的选项:

<?php
// 生成筛选表单
echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '">';
echo '<div style="margin-bottom:10px;">';
echo '<label for="country">筛选国家:</label>';
echo '<select name="country" id="country" style="padding:4px;">';
// 默认显示"所有国家"选项
echo '<option value="" ' . (isset($_POST['country']) && $_POST['country'] == '' ? 'selected' : '') . '>所有国家</option>';
foreach ($countries as $country) {
    // 自动选中用户上次提交的国家
    $selected = (isset($_POST['country']) && $_POST['country'] == $country) ? 'selected' : '';
    echo '<option value="' . htmlspecialchars($country) . '" ' . $selected . '>' . htmlspecialchars($country) . '</option>';
}
echo '</select>';
echo '<button type="submit" style="margin-left:8px;padding:4px 12px;">查看</button>';
echo '</div>';
echo '</form>';
?>

注意:用htmlspecialchars()是为了防止XSS注入,提升安全性;$_SERVER['PHP_SELF']让表单提交到当前页面,不用写死URL。

3. 根据筛选条件生成HTML表格

最后处理筛选逻辑,生成带合并单元格的美观表格:

<?php
// 处理筛选条件,获取要展示的车辆数据
$filteredCars = $cars;
if (isset($_POST['country']) && !empty($_POST['country'])) {
    $selectedCountry = $_POST['country'];
    // 过滤出选中国家的品牌数据
    $filteredCars = array_filter($cars, function($brand) use ($selectedCountry) {
        return $brand[2] == $selectedCountry;
    });
}

// 生成HTML表格
echo '<table border="1" cellpadding="8" cellspacing="0" style="border-collapse:collapse;">';
// 表头
echo '<thead>';
echo '<tr style="background-color:#f0f0f0;">';
echo '<th>品牌代码</th><th>城市</th><th>国家</th><th>车型编号</th><th>驱动类型</th><th>马力</th>';
echo '</tr>';
echo '</thead>';
// 表体
echo '<tbody>';
foreach ($filteredCars as $carBrand) {
    $brandCode = $carBrand[0];
    $city = $carBrand[1];
    $country = $carBrand[2];
    $models = $carBrand[3];
    $modelCount = count($models);
    $modelIndex = 0;
    
    foreach ($models as $model) {
        echo '<tr>';
        // 品牌、城市、国家单元格合并,只在第一个车型行显示
        if ($modelIndex === 0) {
            echo '<td rowspan="' . $modelCount . '">' . htmlspecialchars($brandCode) . '</td>';
            echo '<td rowspan="' . $modelCount . '">' . htmlspecialchars($city) . '</td>';
            echo '<td rowspan="' . $modelCount . '">' . htmlspecialchars($country) . '</td>';
        }
        echo '<td>' . htmlspecialchars($model[0]) . '</td>';
        echo '<td>' . htmlspecialchars($model[1]) . '</td>';
        echo '<td>' . htmlspecialchars($model[2]) . '</td>';
        echo '</tr>';
        $modelIndex++;
    }
}
echo '</tbody>';
echo '</table>';
?>

说明:这里用了rowspan合并同品牌的单元格,让表格看起来更整洁;如果不需要合并单元格,直接去掉rowspan相关代码,每个车型行都重复显示品牌信息即可。

把以上代码放在同一个PHP文件里就能运行了,用户选择国家提交后,表格会自动过滤显示对应国家的车辆数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:49:41