如何删除数组中的空值

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); 
    }

使用array_values方法。 - Matt Burrow
你能解释一下@MattBurrow吗? - Jeroen
@NicolasHenrard,你发布了一个关于JavaScript问题的链接。 - zavg
3个回答

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"
}

这个函数可以从你的数组中移除所有的 null、空和&nbsp

" " 是什么意思? :) - Zemistr
如果我按照代码来做,一切都很合理,应该可以工作,但不知何故它没有。我相当确定问题出在“firstOrCreate”上。我会深入研究一下。谢谢! - Jeroen
@Jeroen,也许是你的文件编码问题。如果确实是这样,请不要忘记将问题标记为已解决。 - Patrick Maciel
@PatrickMaciel 我一点头绪都没有,几乎尝试了所有的方法...我会让我的一个朋友来看看它。我一直找不到标记此问题已解决的按钮或其他任何东西...为什么它被隐藏了呢? - Jeroen
@Jeroen 在“踩”箭头下面。无论如何,你还有问题吗?你使用的是什么操作系统? - Patrick Maciel
显示剩余2条评论

1

您应该使用以下代码在 foreach 中执行 unset

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

谢谢您的回答,但这个方法也是一样的。空值并没有被移除。 - Jeroen

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

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

或者

$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);
}

尝试了两种方法,结果还是一样。可能问题出在 'firstOrCreate' 上吗? - Jeroen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接