2010-11-17 89 views
1

我想处理多个文件上传$ _FILES在这样

foreach ($_FILES as $file) { 
// do stuff... 
// $file['name'] and as such 
} 

数组但是数组看起来像这样

Array ( 
    [name] => Array ( 
     [0] => 2010-10-04_205047.jpg 
     [1] => 
     [2] => 
    ) 

    [type] => Array (
     [0] => image/jpeg 
     [1] => 
     [2] => 
    ) 

    [tmp_name] => Array ( 
     [0] => E:\localhost\tmp\php118.tmp 
     [1] => 
     [2] => 
    ) 

    [error] => Array ( 
     [0] => 0 
     [1] => 4 
     [2] => 4 
    ) 

    [size] => Array ( 
     [0] => 92127 
     [1] => 0 
     [2] => 0 
    ) 
) 

应该如何我把它变成我想要的格式的数组?

谢谢

+0

[这里](http://stackoverflow.com/questions/4818275/weird-format- of-files-array-when-having-multiple-fields/16433951#16433951)是如何做到这一点,我写了类似的问题的一个例子。 – Danijel 2013-05-08 06:31:26

回答

6

这是kludgey,但

$_MYFILES = array(); 
foreach(array_keys($_FILES['name']) as $i) { // loop over 0,1,2,3 etc... 
    foreach(array_keys($_FILES) as $j) { // loop over 'name', 'size', 'error', etc... 
     $_MYFILES[$i][$j] = $_FILES[$j][$i]; // "swap" keys and copy over original array values 
    } 
} 
+0

我认为与使用array_keys相比,手动创建密钥需要的资源更少,因为它总是相同的? – 2010-11-17 10:42:14

+1

确实如此,但这是PHP ...不能保证一个密钥不会被重命名,或者新的密钥将被添加等。不太可能,但并非不可能。虽然内部array_keys调用可以在第一个foreach循环之前完成一次并缓存在一个var中。 – 2010-11-17 10:44:08

+0

我完全同意它..谢谢马克 – 2010-11-17 13:41:29

0

为什么你不想声明新的数组var并将其填入所需格式?例如

$myarr = array(); 
foreach ($_FILES as $file) { 
    $myarr[] = array($file['name'][0], $file['type'][0], $file['tmp_name'][0], $file['size'][0]); 
} 
+1

应该是'tmp_name',而不是'temp_name'(不是PHP的一致命名约定是件好事吗?:p) – 2010-11-17 10:26:10

+0

你是对的。我的印刷错误) – heximal 2010-11-17 10:27:36

+0

我相信这段代码是绝对错误的。 – DarkSide 2012-11-19 23:17:16

0

这个工作对我来说

$files = array(); 
for($i =0;$_FILES['name'][$i] != NULL;$i++){ 
     $files[] = array($_FILES['name'][$i], $_FILES['type'][$i], $_FILES['tmp_name'][$i], $_FILES['size'][$i]); 
}