2014-02-17 57 views
2

目前我檢查是否$ _FILES數組是空的,表示取消像這樣:解除空變量的更好方法?

if ($var === 'AP' && empty($_FILES['field_1']['name'])) { 
    unset($_FILES['field_1']); 

} 
if ($var === 'AP' && empty($_FILES['field_2']['name'])) { 
    unset($_FILES['field_2']); 

} 
if ($var === 'AP' && empty($_FILES['field_1']['name']) && empty($_FILES['field_2']['name'])) { 
    unset($_FILES['field_1']); 
    unset($_FILES['field_2']); 

} 

這是圖片上傳,什麼時候有圖片少量,可以上傳作品。現在我將有15個上傳字段,它們都是可選的。有沒有更好的方法來取消那些空的數組,而不是像上面那樣爲每個可能的組合使用上面的條件?

+1

做它在循環? – FazoM

回答

2

爲什麼不設置設置的那個,而不是設置爲空的設置? (這是很好的做法,因爲你可能想在所設置的那些執行一些驗證動作)

$clean = array();  
foreach($_FILE as $fileKey => $fileValue){ 
    if($fileValue) { 
     $clean[$fileKey] = $fileValue; 
    } 
// if you really want to unset it : 
    else{ 
     unset($_FILE[$fileKey]); 
    } 
} 
+1

我基本上是在輸入同樣的答案,所以我會離題。我只是想補充說,把15個輸入字段放在頁面上也不是很乾淨。除非有非技術原因,否則最好讓這些動態變得強大並取消15的硬限制。 – krowe

+0

謝謝!有用! – Kisaragi

2
for ($x = 0; $x < 15; $x++) { 
    if ($var === 'AP' && empty($_FILES[$x]['name'])) { 
     unset($_FILES[$x]); 
    } 
} 

應該做的伎倆。 (可以使用一個檢查,以確保元素被設置和一些清理工作,但你的想法)

1

這實際上是$_FILES['name'][0]$_FILES[0]['name'],等等等等只是刪除清空:

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

那麼就使用$_FILES['name']作爲要循環的數組,鍵仍然與其他數組相同。

0

您可以使用array_filter刪除空元素:

$emptyRemoved = array_filter($linksArray); 

如果你有你的數組中(int) 0,您可以使用以下方法:

$emptyRemoved = remove_empty($linksArray); 

function remove_empty($array) { 
    return array_filter($array, '_remove_empty_internal'); 
} 

function _remove_empty_internal($value) { 
    return !empty($value) || $value === 0; 
} 

編輯:也許你的元素不空說,但包含一個或多個空格...您可以在使用前使用以下內容array_filter

$trimmedArray = array_map('trim', $linksArray);