2011-08-23 62 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(見轉換爲布爾)輸入的所有條目會被刪除。「