如何获得foreach中的迭代总数

时间:2010-01-30 16:51:03

标签: php

可能有更好的方法可以做到这一点,我当然乐于接受建议。

我有一个文件上传脚本,可以处理多个上传。我想要做的是计算循环对成功移动的每个文件的迭代次数,如果该数量等于上传的文件总数,则使用异常向用户显示文件已被接收。

我以为我会在循环内增加然后从那里开始计数,但我得到的是每个上传的文件的数组,导致总数不正确。有没有更好的方法来执行此操作或成功计算每次迭代?

这是我必须使用的结构

    foreach($files as $file)
    {
        if ($file['error'] == UPLOAD_ERR_OK)
        {
            move_uploaded_file($file['tmp_name'], $filename);
        }
        else
        {
           //error
        }
    }

4 个答案:

答案 0 :(得分:3)

你几乎要用计数器来做。

$success = 0;
foreach($_FILES as $file) {

    if(is_uploaded_file($file['tmp_name'])) {
        move_uploaded_file($file['tmp_name'], $destination);
        $success += 1;
    }
}

if($success != count($_FILES)) {
    //error message / exception
}

编辑 - 您可以在错误处理中设置错误标记或标记......但实际上没有办法做到这一点,这是非常好的。

foreach($files as $file)
{
    if ($file['error'] == UPLOAD_ERR_OK)
    {
        move_uploaded_file($file['tmp_name'], $filename);
    }
    else
    {
       //error
       $upload_errors += 1;
       //or, to get a little more info...
       //$upload_errors[] = $file
    }
}

if( $upload_errors == 0) { //or count($upload_errors) == 0
    // tell the user that the upload failed.
}

答案 1 :(得分:0)

foreach ($array as &$item)

您可以count($array)

答案 2 :(得分:0)

因为你知道文件的数量而只是使用for循环,所以就把它扔掉。有两个计数器,一个用于循环,一个用于成功,除非你的脚本大部分失败(并且你不希望一切正常有多么不寻常)如果一切正常,不要抛出异常。

答案 3 :(得分:0)

在这里,您可以看到可以使用count($ _ FILES)来计算上传文件的数量。请注意,这不是正确上传文件的数量。

<?php
if (isset($_FILES) && !empty($_FILES)) {
    echo count($_FILES).' files were uploaded<br>';
    ?><pre><?php
    print_r($_FILES);
    ?></pre><?php

}
?>
<form 
    action="<?php echo $_SERVER['PHP_SELF'];?>" 
    method="post"
    enctype="multipart/form-data"
>
    File 1<input type="file" name="file1"><br>
    File 2<input type="file" name="file2"><br>
    File 3<input type="file" name="file3"><br>
    <input type="submit" value="upload">
</form>