一个更好的方法来取消设置空变量?

时间:2014-02-17 16:06:42

标签: php codeigniter

目前我正在检查$ _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个上传字段,它们都是可选的。是否有更好的方法来取消设置那些空的数组而不为每个可能的组合执行上述条件?

4 个答案:

答案 0 :(得分: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 :(得分:2)

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

应该做的伎俩。 (可以使用检查来确保元素设置和一些清理,但你明白了)

答案 2 :(得分:1)

它实际上是$_FILES['name'][0]而不是$_FILES[0]['name']等,所以只需删除空白:

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

然后只需使用$_FILES['name']作为数组进行循环,键仍将与其他数组相同。

答案 3 :(得分: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);