2014-02-17 18 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; 
} 

EDIT: Может быть, ваши элементы не являются пустые для одного, но содержат одно или несколько пробелов ... Вы можете использовать следующее, прежде чем использовать array_filter

$trimmedArray = array_map('trim', $linksArray); 
Смежные вопросы