我从网站上抓取了一个非常糟糕的格式化字符串并将其转换为数组。现在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)它运作得很好。有什么想法吗?
答案 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);