2014-07-04 56 views
3

我正在寻找一种方法来从数组中删除空值。如何删除数组的空值

如果您看到下面的代码,我试图删除在将其附加到模型之前通过的空值。但迄今为止,这种情况并没有发生。

我之前在网上搜索过,所以我知道trim()没有给出预期的效果,以及array_map()和下面的代码。

寻找解决方案,谢谢!

if(Input::get('addcategorie')) 
    { 
     $new_cats = array(); 
     foreach(
      explode(
       ',', Input::get('addcategorie')) as $categorie) 
     { 
      $categorie = Categorie::firstOrCreate(array('name' => $categorie)); 
      foreach($new_cats as $newcat) 
      if($newcat == ' ' || $newcat == ' ' || $newcat == ''){ 
       unset($newcat); 
      } 
      array_push($new_cats, $categorie->id); 
     } 
     $workshop->categories()->attach($new_cats); 
    } 
+0

使用array_values方法。 –

+0

你能解释@MattBurrow吗? – Jeroen

+0

没有@NicolasHenrard – Jeroen

回答

1

您应该foreach使用下面的代码unset

foreach($new_cats as $key => $newcat) { 
    if(yourCondition) { 
     unset($new_cats[$key]) 
    } 
} 
+0

感谢您的回答,但这也是一样的。空值不会被删除。 – Jeroen

0
foreach($new_cats as $newcat_i => $newcat) { 
    $newcat = trim($newcat); 

    if($newcat == ' ' || $newcat == '') { 
     unset($new_cats[$newcat_i]); 
    } 
} 

OR

$new_cats = array_filter(
    $new_cats, function ($value) { 
     $value = trim($value); 

     return $value != '' && $value != ' '; 
    } 
); 

最后的代码是:

if(Input::get('addcategorie')) { 
    $new_cats = array(); 
    foreach(explode(',', Input::get('addcategorie')) as $categorie) { 
     $categorie = Categorie::firstOrCreate(array('name' => $categorie)); 

     array_push($new_cats, $categorie->id); 
    } 

    $new_cats = array_filter(
     $new_cats, function ($value) { 
      $value = trim($value); 

      return $value != '' && $value != ' '; 
     } 
    ); 

    $workshop->categories()->attach($new_cats); 
} 
+0

都尝试过,结果仍然相同。难道这个'问题'是'first orrreate'? – Jeroen

+0

我已更新代码;) – Zemistr

4

只需使用array_filter

$array = [ 
    0 => 'Patrick', 
    1 => null, 
    2 => 'Maciel', 
    3 => '&nbsp', 
    4 => ' ' 
]; 

$filtered = array_filter($array); 

$nbsp = array_filter($array, function($element) { 
    return $element == '&nbsp' OR $element == ' '; 
}); 

$clean = array_diff($filtered, $nbsp); 

的回报是:

array(2) { 
    [0]=> 
    string(7) "Patrick" 
    [2]=> 
    string(6) "Maciel" 
} 

此功能从阵列中删除所有空,空,& NBSP

+0

以及' '是什么? :) – Zemistr

+0

请注意,也是从数组中删除空字符串或“假”的值。但我认为这是TS想要达到的最佳解决方案。 – TiMESPLiNTER

+0

不知何故,它仍然将空值添加为新类别。难道这个'问题'是'first orrreate'? – Jeroen