2013-08-23 19 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

这将从表单中可用的所有文件循环。我只想从用户选择的文件中循环。 –