【发布时间】:2025-12-26 01:45:06
【问题描述】:
对于我尝试上传多个文件的 laravel 项目。这些文件是可选的,所以我想在遍历所有图像之前进行检查。
我的表单输入部分。
{!! Form::open(array( 'files'=>true)) !!}
{!! Form::file('images[]', array('multiple'=>true, 'class' => 'form-control')) !!}
{!! Form::close() !!}
(表单有 enctype="multipart/form-data" 输入字段有 multiple="1")
我当前的检查代码:
$files = Input::file('images');
$uploaded = 0;
$failed = 0;
if(!empty($files)){
try {
foreach ($files as $file) {
//upload file $uploaded ++ or $failed ++;
$rules = array('file' => 'required|image'); // 'required|mimes:png,gif,jpeg,txt,pdf,doc'
$validator = Validator::make(array('file' => $file), $rules);
if ($validator->passes()) {
//if file uploaded succesfuly $uploaded++;
}
else{
$failed++;
}
}
}
catch(Exception e){
//Handle error
}
}
当我用 if(count($files) > 0) 更改 !empty($files) 时,它仍然会进入 foreach。
我使用 $failed 和 $uploaded,在这部分代码完成后,根据失败/上传的数量显示一条消息。但是,当我不选择任何文件时,$failed 为 1(即使数组为空)。循环 $files 以计算数量,在我循环它们上传之前感觉就像浪费内存/时间/等,有没有比循环 $files 数组来获取文件数量更好的方法?
子问题:为什么它为空时运行foreach循环?
【问题讨论】:
-
为什么是
$failed is 1 (even if array is empty)? -
@u_mulder 查看编辑(我有一个验证器在上传之前检查 $files 是否是有效图像
-
要知道数组的大小(=它的元素个数),可以使用函数count。 count($files) 将告诉 $files 数组中的项目数。请注意,数组可能包含 null 或空白项。例如:$files = array();$files[0] = "";这将计数为 1(并且将满足 !empty($files) 条件)。我猜你的循环是用空元素运行的。您应该检查给定的 $file 变量是否不是空/空字符串。
-
@varocarbas 但是如果它是空的,为什么它会进入foreach?
-
注意编辑我试过的地方 if(count($files > 0))