2010-11-17 87 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]); 
}