取消设置空数组元素

时间:2011-08-23 22:28:45

标签: php arrays unset

我正在使用$_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数组元素的合理方法?

5 个答案:

答案 0 :(得分:5)

当你使用foreach($_FILES['images']['name'] as $image)语句时,$ image会成为数组中实际元素的副本,你正在做的是取消设置该副本,这就是你应该这样做的方法:

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

答案 1 :(得分:1)

首先,你的问题并不具体,因为如果你正在处理单个文件,则不需要foreach(($ _FILES ['images'] ['name']作为$ image)。 再次你提到你的形式空字段,这应该触发案例4错误。那是没有上传的文件。所以使用ur错误方法设置如下

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)

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

答案 3 :(得分:0)

使用错误代码最好

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

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

    }

答案 4 :(得分:0)

这个非循环的答案怎么样?

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

或者如果您更喜欢一行:

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

来自manual page for array_filter

&#34;如果没有提供回调,则输入的所有输入等于FALSE(参见转换为布尔值)将被删除。&#34;