如何从数组中删除空字符串?

时间:2017-07-21 09:36:27

标签: php arrays string

我从网站上抓取了一个非常糟糕的格式化字符串并将其转换为数组。现在tt包含一些空字符串或只有空白字符串我想要删除但它不起作用。 我尝试过apply_filter($ array)但没有成功。此外,我尝试手动迭代并过滤掉这些元素,但它根本不起作用。好像我无法访问这些元素:

foreach($array as $elem){
     if($elem == " " || $elem == "")
          echo "Want access this: " . elem . "<br>";
          //No Output
}

如何访问此数组元素并删除?这是数组(我想删除的节点是字符串(21)元素(所以长度为21?!):

array(47) { [0]=> string(31) "16.11.2016" [1]=> string(23) " " [2]=> string(21) "" [3]=> string(21) "" [4]=> string(21) "" [5]=> string(21) "" [6]=> string(21) "" [7]=> string(21) "" [8]=> string(31) "18.01.2017" [9]=> string(148) "
"Some text inside this one

" [10]=> string(21) ""}

编辑:感谢提示,但没有做任何事情,因为问题是空格的长度 - 字符串是不同的。根据之前的回答,我现在正尝试用 preg_match(“/ \ s {2,} /”,$ val); 来捕捉这些元素,但我无法捕捉它们。在线测试仪  (http://www.phpliveregex.com/p/kNL)它运作得很好。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

如前所述,使用array_filter()trim()过滤掉空字符串或仅包含空格的元素:

$filtered = array_filter($array, function ($element) {
    return is_string($element) && '' !== trim($element);
});

供参考,见:

答案 1 :(得分:-1)

你可以使用数组过滤器

function odd($var)
{
    return(trim($var) != "");
}


$array = array(1, " ", 2, " ");
print_r(array_filter($array, "odd"));

问候。

答案 2 :(得分:-1)

第一: if($elem == " " || $elem == " ")

对我而言,似乎你写了两次相同的比较。

关于你的阵列清理,也许你会通过尝试来获得你想要的东西:

foreach ($array as $key => $val) {
    if (preg_match('/^\s*$/', $val) OR $val === NULL) {
        unset($array[$key]);
    }
}

$ array = array_values($ array);

如果数组是NULL,则该代码会从数组中删除条目,不包含空格字符或仅包含空格字符等。 由于您的数组已编制索引,因此我添加了使用新的连续索引再次构建数组的最后一行,以便在其中没有删除条目的孔。

希望它有所帮助。

答案 3 :(得分:-2)

$filtered = array_filter($array, function($v,$k) {
    return $v !== "";
}, ARRAY_FILTER_USE_BOTH);

请参阅http://php.net/array_filter