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

多名称文件输入字段的PHP文件上传问题

解决PHP多文件上传合并到指定$_FILES键的问题

我懂你的痛点——你之前的代码之所以只保留最后一个文件,是因为每次循环都直接用新的文件数据覆盖了$_FILES['ftr_file_uploads'],而不是把所有文件的信息追加合并进去。要实现你想要的结构,需要逐个处理每个文件的子属性(name、type、tmp_name等),把它们合并到目标数组中。

正确的实现代码

// 先初始化目标数组的结构,确保每个子数组都是空数组
$_FILES['ftr_file_uploads'] = [
    'name' => [],
    'type' => [],
    'tmp_name' => [],
    'error' => [],
    'size' => []
];

// 遍历原始的$_FILES数组
foreach ($_FILES as $key => $fileData) {
    // 跳过刚创建的目标键,避免重复处理
    if ($key === 'ftr_file_uploads') {
        continue;
    }

    // 将每个文件的子属性数组合并到目标数组对应位置
    $_FILES['ftr_file_uploads']['name'] = array_merge(
        $_FILES['ftr_file_uploads']['name'],
        $fileData['name']
    );
    $_FILES['ftr_file_uploads']['type'] = array_merge(
        $_FILES['ftr_file_uploads']['type'],
        $fileData['type']
    );
    $_FILES['ftr_file_uploads']['tmp_name'] = array_merge(
        $_FILES['ftr_file_uploads']['tmp_name'],
        $fileData['tmp_name']
    );
    $_FILES['ftr_file_uploads']['error'] = array_merge(
        $_FILES['ftr_file_uploads']['error'],
        $fileData['error']
    );
    $_FILES['ftr_file_uploads']['size'] = array_merge(
        $_FILES['ftr_file_uploads']['size'],
        $fileData['size']
    );

    // 删除原始的单个文件键
    unset($_FILES[$key]);
}

代码说明

  1. 初始化目标数组:先创建ftr_file_uploads键,并为它的五个子属性(name、type等)初始化空数组,这样后续可以安全地合并元素。
  2. 遍历处理原始数据:循环每个原始的文件上传项,跳过我们刚创建的目标键,避免循环时重复处理。
  3. 合并子属性数组:用array_merge()把每个原始文件的子属性数组(比如每个$fileData['name']是包含单个文件名的数组)合并到目标数组对应的子属性中,这样所有文件的信息就会依次追加进去。
  4. 清理原始键:合并完成后删除原始的单个文件键,最终$_FILES就只剩下ftr_file_uploads键,结构完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:28:41