关联数组键移除无效,需转换文件上传数组结构
解决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
相关产品推荐
相关产品推荐

