【问题标题】:How to remove empty value of array如何删除数组的空值
【发布时间】:2014-07-04 13:14:21
【问题描述】:

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

如果您看到下面的代码,我正在尝试在将其附加到模型之前删除传递的空值。但到目前为止还没有变成这样。

当然,我在询问之前搜索了网络,所以我知道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 方法。
  • 你能解释一下@MattBurrow吗?
  • @NicolasHenrard 您发布了指向 Javascript 问题的链接

标签: php arrays input laravel-4


【解决方案1】:

只需使用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、empty 和 &nbsp

【讨论】:

  • 还有什么' ' ? :)
  • 请注意,空字符串或false 的值也会从数组中删除。但我认为这是 TS 想要实现的最佳解决方案。
  • 不知何故,它仍然将空值添加为新类别。难道“问题”出在“firstOrCreate”上?
  • 如果我按照代码进行操作,这一切都说得通,它应该可以工作,但不知何故却没有。我很确定问题出在“firstOrCreate”。我将对此进行更深入的研究。谢谢!
  • @Jeroen 可能是您的文件编码。如果确实如您所说,请不要忘记将问题标记为已解决。
【解决方案2】:

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

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

【讨论】:

  • 感谢您的回答,但这也是一样的。不会删除空值。
【解决方案3】:
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”上?
猜你喜欢
  • 2019-09-05
  • 2017-06-16
  • 1970-01-01
  • 2019-09-11
  • 2021-04-10
  • 2017-09-27
  • 2016-08-14
  • 2020-01-01
  • 1970-01-01
相关资源
最近更新 更多