我正在使用$_FILES
,有时由于表单上的空文件输入,数组有空数组元素。我试图取消这些元素。
我已尝试过这些代码段:
foreach($_FILES['images']['name'] as $image)
{
if(empty($image))
{
unset($image);
}
}
foreach($_FILES['images']['name'] as $image)
{
if($image == "")
{
unset($image);
}
}
foreach($_FILES['images']['name'] as $image)
{
if(!$image)
{
unset($image);
}
}
但是数组总是带有空元素。实际上是否有一种使用PHP删除空$ _FILES数组元素的合理方法?
答案 0 :(得分:5)
当你使用foreach($_FILES['images']['name'] as $image)
语句时,$ image会成为数组中实际元素的副本,你正在做的是取消设置该副本,这就是你应该这样做的方法:
foreach( $_FILES['images']['name'] as $key => $value ) {
if( empty($value) ) {
unset( $_FILES['images']['name'][$key] );
}
}
答案 1 :(得分:1)
首先,你的问题并不具体,因为如果你正在处理单个文件,则不需要foreach(($ _FILES ['images'] ['name']作为$ image)。 再次你提到你的形式空字段,这应该触发案例4错误。那是没有上传的文件。所以使用ur错误方法设置如下
if($_FILES['upload']['error'] > 0){
echo 'the file couldnt be uploaded because';
switch($_FILES['upload']['error']){
case 1:
print 'the file exceeds max size in php.ini';
break;
case 2:
print 'the file exceeds max size in html settings';
break;
case 3:
print 'the file was partially uploaded';
break;
case 4:
print 'no file was uploaded';
break;
case 6:
print 'no temporary folder available';
break;
case 7:
print 'unable to write to disk';
break;
case 8:
print 'file upload stopped';
break;
default:
print 'a sys error occured';
break;
通过此操作会通知错误,并且您知道已上传的空白图像。为了节省UNSET()的压力。 如果它是多重上传,你会有像
这样的东西foreach ($_FILES['upload']['name'] as $number => $filename)
答案 2 :(得分:0)
除了没有人回答之外,如果您还要从type
,tmp_name
,size
等数组中删除该元素,则使用:
// Before stripping
print_r($_FILES);
$length = count($_FILES['images']['name']);
for($i = 0; $i < $length; $i++){
if(empty($_FILES['images']['name'][$i]))
foreach($_FILES['images'] as $key => $value)
unset($_FILES['images'][$key][$i]);
}
// After stripping
print_r($_FILES);
答案 3 :(得分:0)
使用错误代码最好
foreach( $_FILES['images']['error'] as $key => $value ) {
if($value==0) {
// file good do code
} else {
unset( $_FILES['images']['name'][$key] );
}
}
答案 4 :(得分:0)
这个非循环的答案怎么样?
$in = $_FILES['images']['name'];
$out = array_filter($in);
或者如果您更喜欢一行:
$out = array_filter($_FILES['images']['name']);
来自manual page for array_filter
:
&#34;如果没有提供回调,则输入的所有输入等于FALSE(参见转换为布尔值)将被删除。&#34;