$ _FILES数组及其愚蠢的结构

时间:2012-07-27 15:07:02

标签: php file upload

  

可能重复:
  How do you loop through $_FILES array?

由于某些原因阵列真的找到了我。我最终可以到达那里,但这个$ _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>";

这似乎很长很啰嗦,但是我的思绪一直停留在如何正确地遍历这个数组的不同部分以使其工作并以我想要的方式循环。

必须有更好的方法吗?

请帮忙!

2 个答案:

答案 0 :(得分:6)

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

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>";

}

答案 1 :(得分:3)

从您的代码中,我认为您的<form>输入看起来像这样:

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

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

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

结果如下:

array(2) {
  'attachment0' => array(5) {
    'name'     => string(8) "1528.jpg"
    'type'     => string(0) ""
    'tmp_name' => string(0) ""
    'error'    => int(2)
    'size'     => int(0)
  }
  'attachment1' => array(5) {
    'name'     => string(8) "1529.jpg"
    'type'     => string(0) ""
    'tmp_name' => string(0) ""
    'error'    => int(2)
    'size'     => int(0)
  }
}