2014-07-04 82 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