【问题标题】:Remove array if any element is empty [duplicate]如果任何元素为空,则删除数组[重复]
【发布时间】:2013-02-09 05:16:17
【问题描述】:

我的数组具有以下结构。它是通过表单提交的文件数组。我有多个表单输入字段。但是,如果用户将某些字段留空,则数组将如下所示。 然后我将它写入我的数据库。我不想写空字段。

我尝试使用array_filter() 函数,但它不起作用,因为我的数组不是完全为空的。错误元素设置为4。我该怎么做?

Array
(
    [0] => Array
        (
            [name] => stock-photo-cup-icons-tea-and-coffee-raster-version-109119257.jpg
            [type] => image/jpeg
            [tmp_name] => /tmp/phpqWWM9X
            [error] => 0
            [size] => 30609
        )

    [1] => Array
        (
            [name] => 
            [type] => 
            [tmp_name] => 
            [error] => 4
            [size] => 0
        )

    [2] => Array
        (
            [name] => 
            [type] => 
            [tmp_name] => 
            [error] => 4
            [size] => 0
        )

    [3] => Array
        (
            [name] => 
            [type] => 
            [tmp_name] => 
            [error] => 4
            [size] => 0
        )

)

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    您可以将(可选)回调传递给array_filter()

    $filteredArray = array_filter($source, function($item) {
        return ($item['size'] > 0 && $item['error'] === 0);
    });
    
    var_dump($filteredArray);
    

    演示:http://codepad.viper-7.com/uocPT6

    【讨论】:

      【解决方案2】:

      这个简单的脚本:

      foreach ($array as &$a) {
          $todel = false;
          foreach ($a as $k => $v) {
              if (empty($v)) { // condition to consider a variable empty
                  $todel = true; break;
              }
          }
          if ($todel) unset($a);
      }
      

      应该可以正常工作。我认为该代码几乎可以解释自己。我们正在做的是在$array(主数组)中进行foreach 循环,并检查$a 子数组(通过引用传递)是否有任何空值。如果是这样,我们将设置 $todel = true(和 break; 以提高效率)将取消设置当前的 $a 子数组。

      【讨论】:

        【解决方案3】:
        for($i=0;$i<count($theArray);$i++)
        {
            if($theArray[$i]['error']==4) 
            { 
                unset($theArray[$i]); 
            }
        }
        

        我会这样做

        【讨论】:

        • unset($theArray[$i]; to unset($theArray[$i]); 我编辑了这个,但仍然显示语法错误
        • 刚刚测试过,它可以工作
        【解决方案4】:

        使用简单的条件

        if(error == 0){
            //insert here
        }else{
           //do nothing
        }
        

        【讨论】:

          猜你喜欢
          • 2018-05-05
          • 2018-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多