2013-08-23 20 views
2

我想在$ _FILES []數組中添加循環。我試過$count= count($_FILES['files'][name]),然後在它周圍加上循環for($i=0; $i<=$count; $i++),但它沒有給我想要的輸出。

我想要僅從用戶正在上傳的文件中加入循環,現在它正在計算表單中可用的所有'文件'。

請告訴我一種方法,只計算上傳的文件並循環播放它們。

+0

嘗試沒有'[名]'像'計數($ _ FILES [ '文件'])',而不是'計數($ _ FILES [ '文件'] [名])' – Bora

+0

可能HTTP的重複:// foreachoverflow.com/questions/5444827/how-do-you-loop-through-files-array –

回答

4

循環有史以來$_FILES陣列,並使用['name']迭代裏面:

$count = count($_FILES['files']) 
for($i=0; $i<=$count; $i++) { 
    if ($_FILES['files'][$i]['size']) 
    echo $_FILES['files'][$i]['name']."\n"; 
} 

即使是更容易使用foreach循環:

foreach($_FILES['files'] as $file) { 
    if($file['size']) 
    echo $file['name']."\n"; 
} 
+1

使用foreach,無論數組的長度是多少,數組中都會得到5個元素。出於這個原因,數組需要按照有序的順序重新創建。像這裏解釋的http://php.net/manual/en/features.file-upload.multiple.php – Elnoor

3

您可以使用array_filter了點。您可以過濾數組以獲取上傳文件的輸入。

$uploaded_files = array_filter($_FILES['files'], function($file){ 
    return $file['size']; 
}); 

print count($uploaded_files); 

foreach($uploaded_files as $file) 
{ 
    //code 
} 
+0

我可以用它來過濾掉空的文件嗎?對於多個上傳文件數據 – danielad

2

您可以通過以下方式將文件循環:

$count = count($_FILES['files']['tmp_name']); 
for($i=0;$i<$count;$i++) { 
    $file_name = $_FILES['files']['name'][$i]; 
    $file_type = $_FILES['files']['type'][$i]; 
    $file_error = $_FILES['files']['error'][$i]; 
    $file_size = $_FILES['files']['size'][$i]; 
} 
0

所以,我從你的問題的理解,$_FILES['files']是上傳文件的數組,這樣你就可以像數組行動吧。嘗試foreach

foreach ($_FILES['files'] as $file){ 
    // now do something with $file 
    move_uploaded_file($file["tmp_name"],"upload/" . $file["name"]);//e.g uploading it 
} 
+0

這將從表單中可用的所有文件循環。我只想從用戶選擇的文件中循環。 –