使用name[]时在PHP中正确堆叠文件数组

使用name[]时在PHP中正确堆叠文件数组,php,multidimensional-array,Php,Multidimensional Array,我有一个动态表单,当我收集数据时,我使用输入标记中的name='samples[],将所有上传的文件放入一个数组中。目前,这将生成一个数组,其中$_FILES['samples']['name']实例的每个文件属性都是一个数组,依次包含每个文件的相应属性。理想情况下,我希望$_FILES['samples']是一个数组,其中每个成员都是一个单独的文件,每个文件属性将包含一个值,而不是一个数组。我尝试了各种组合移动括号,但都没有用 目前的安排: 我想要的是: 我不能相信这一点,因为这是直接从PHP

我有一个动态表单,当我收集数据时,我使用输入标记中的name='samples[],将所有上传的文件放入一个数组中。目前,这将生成一个数组,其中$_FILES['samples']['name']实例的每个文件属性都是一个数组,依次包含每个文件的相应属性。理想情况下,我希望$_FILES['samples']是一个数组,其中每个成员都是一个单独的文件,每个文件属性将包含一个值,而不是一个数组。我尝试了各种组合移动括号,但都没有用

目前的安排:

我想要的是:


我不能相信这一点,因为这是直接从PHP手册页上的$\u文件-

阅读文档会为您解决这个问题

在将输入名称用作数组时,对$\u FILES数组重新排序的一个好技巧是:

<?php
function diverse_array($vector) {
    $result = array();
    foreach($vector as $key1 => $value1)
        foreach($value1 as $key2 => $value2)
            $result[$key2][$key1] = $value2;
    return $result;
}
?>
进入:

只要做:

<?php $upload = diverse_array($_FILES["upload"]); ?>

改变创建数组而不是管理当前数组的方式。我现在给你+1,但我希望有一个更内置的解决方案,我相信它一定存在。我不知道,无论出于什么原因,在PHP中实现$\u文件行为的人似乎是以一种非直观的方式来做的。我还没有看到你改变这种行为的任何方式,所以如果其他人发布这样的解决方案,我会很感兴趣。
<?php
function diverse_array($vector) {
    $result = array();
    foreach($vector as $key1 => $value1)
        foreach($value1 as $key2 => $value2)
            $result[$key2][$key1] = $value2;
    return $result;
}
?>
array(1) {
    ["upload"]=>array(2) {
        ["name"]=>array(2) {
            [0]=>string(9)"file0.txt"
            [1]=>string(9)"file1.txt"
        }
        ["type"]=>array(2) {
            [0]=>string(10)"text/plain"
            [1]=>string(10)"text/html"
        }
    }
}
array(1) {
    ["upload"]=>array(2) {
        [0]=>array(2) {
            ["name"]=>string(9)"file0.txt"
            ["type"]=>string(10)"text/plain"
        },
        [1]=>array(2) {
            ["name"]=>string(9)"file1.txt"
            ["type"]=>string(10)"text/html"
        }
    }
}
<?php $upload = diverse_array($_FILES["upload"]); ?>