$_FILES数组及其愚蠢的结构


$_FILES array and its silly structure

可能重复:
如何循环使用$_FILES数组?

出于某种原因,数组真的很吸引我。我最终可以到达那里,但这个$_FILES数组似乎对我来说是倒退的。

我希望能够循环通过$_FILES,如下所示:

foreach($_FILES as $file)
{
   echo $file['name'] . "<br>";
   echo $file['type'] . "<br>";
   echo $file['size'] . "<br>";
   echo $file['error'] . "<br>";
}

但很明显,以它的结构方式,你无法做到这一点。所以我写了以下内容:

echo "<pre>";
                $x=0;
                $file = array();
                foreach($_FILES['attachment']['name'] as $data)
                {   $file[$x]=array(); 
                    array_push($file[$x],$data); $x++;
                }
                $x=0;
                foreach($_FILES['attachment']['type'] as $data)
                    {   array_push($file[$x],$data); $x++;}
                $x=0;
                foreach($_FILES['attachment']['tmp_name'] as $data)
                    {   array_push($file[$x],$data); $x++;}
                $x=0;
                foreach($_FILES['attachment']['error'] as $data)
                    {   array_push($file[$x],$data); $x++;}
                $x=0;
                foreach($_FILES['attachment']['size'] as $data)
                    {   array_push($file[$x],$data); $x++;}
                var_dump($file);
                echo "</pre>";

这似乎很冗长,也很荒谬,但我现在的想法是,如何正确地循环通过这个阵列的不同部分,使其工作并以我希望的方式循环。

一定有更好的方法吗?

请帮忙!

如果它们都有相同的长度,你可以这样做

for($i = 0; $i < count($_FILES['attachment']['name']); $i++)
{
   echo $_FILES['attachment']['name'][$i] . "<br>";
   echo $_FILES['attachment']['type'][$i] . "<br>";
   echo $_FILES['attachment']['size'][$i] . "<br>";
   echo $_FILES['attachment']['error'][$i] . "<br>";
}

根据您的代码,我假设您的<form>输入如下所示:

<input type="file" name="attachment[]">
<input type="file" name="attachment[]">

如果您为文件字段指定了唯一的名称,则应获得所需的$_FILES结构:

<input type="file" name="attachment0">
<input type="file" name="attachment1">

结果如下:

阵列(2){"attachment0"=>数组(5){'name'=>字符串(8)"1528.jpg"'type'=>字符串(0)"'tmp_name'=>字符串(0)"'error'=>int(2)"size"=>int(0)}"attachment1"=>数组(5){'name'=>字符串(8)"1529.jpg"'type'=>字符串(0)"'tmp_name'=>字符串(0)"'error'=>int(2)"size"=>int(0)}}