2011-08-23 128 views
2

我正在与$_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

你可以用空元素添加一个数组的打印吗? 'print_r($ _ FILES);'的结果可以。 –

回答

5

当您使用foreach($_FILES['images']['name'] as $image)声明$图像变成实际元素的数组中的一个副本,你在做什么,是你重置该副本,这是你应该怎么做:

foreach($_FILES['images']['name'] as $key => $value) { 
    if(empty($value)) { 
     unset($_FILES['images']['name'][$key]); 
    } 
} 
+0

这一个工程。谢谢! – John

0

除了人的回答,如果你也想从剥离元素typetmp_namesize等阵列使用:

// 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); 
+0

对不起,我应该更具体。 '$ _FILES ['images'] ['name']'是一个数组,如以下print_r所示:http://pastebin.com/JYmCvYBU – John

1

下手,你的问题是不特定的,因为如果u正在无线($ _FILES ['images'] ['name'] as $ image)。 再次提到你的表单中的空字段,这应该触发case 4错误。这是没有文件上传。所以与你的错误方法设置像这样

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) 
0

最好

foreach($_FILES['images']['error'] as $key => $value) { 

    if($value==0) { 
     // file good do code 
    } else { 
    unset($_FILES['images']['name'][$key]); 
    } 

    } 
0

这个怎么样不糊涂的答案吗?

$in = $_FILES['images']['name']; 
$out = array_filter($in); 

或者如果你喜欢一个行:

$out = array_filter($_FILES['images']['name']); 

manual page for array_filter

“如果没有回调提供,等于FALSE(见转换为布尔)输入的所有条目会被删除。“