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

关联数组键移除无效,需转换文件上传数组结构

解决PHP中文件上传数组结构转换问题

你现在遇到的是PHP文件上传后$_FILES数组结构重组的问题——原始数组把每个文件的name和type分别嵌套在单个文件的子数组里,而你需要把所有文件的name归到同一个数组下,type同理。

先看你的原始数组结构:

array(1) { 
  ["ftr_file_uploads"]=> array(2) { 
    [0]=> array(2) { 
      ["name"]=> array(1) { [0]=> string(13) "Hydrangeas.jpg" } 
      ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } 
    } 
    [1]=> array(2) { 
      ["name"]=> array(1) { [0]=> string(13) "w.jpg" } 
      ["type"]=> array(1) { [0]=> string(10) "image/jpeg" } 
    } 
  } 
}

你想要转换成的目标结构:

array(1) { 
  ["ftr_file_uploads"]=> array(2) { 
    ["name"]=> array(2) { 
      [0]=> string(14) "Hydrangeas.jpg" 
      [1]=> string(5) "w.jpg" 
    } 
    ["type"]=> array(2) { 
      [0]=> string(10) "image/jpeg" 
      [1]=> string(10) "image/jpeg" 
    } 
  } 
}

你之前尝试的代码逻辑有问题:直接操作$_FILES['ftr_file_uploads']的同时遍历它,而且赋值方向不对,自然达不到预期效果。我们需要重新构建一个符合目标结构的新数组,把每个文件的对应字段提取合并。

解决方案代码

用下面的代码就能实现结构转换:

// 初始化符合目标结构的空数组
$convertedFiles = [
    'ftr_file_uploads' => [
        'name' => [],
        'type' => []
    ]
];

// 遍历原始的文件数组,提取对应字段合并
foreach ($_FILES['ftr_file_uploads'] as $file) {
    $convertedFiles['ftr_file_uploads']['name'][] = $file['name'][0];
    $convertedFiles['ftr_file_uploads']['type'][] = $file['type'][0];
}

// 如果需要替换原来的$_FILES数组,执行这一步
$_FILES = $convertedFiles;

代码说明

  • 先创建一个和目标结构一致的空数组,提前定义好name和type的空容器;
  • 遍历原始$_FILES['ftr_file_uploads']里的每个文件项,把每个文件中嵌套的name[0]和type[0]提取出来,分别追加到对应数组的末尾;
  • 最后如果需要覆盖原来的$_FILES,直接把转换后的数组赋值给它即可。

这样处理后,就能得到你想要的数组结构了。

内容的提问来源于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:38:51