我正在尝试使用以下函数从空值中清除数组:
function remove_empty_cells($data)
{
$findthis = array("/\r\n/u", "/\n/u", "/\r/u", "/\s+/u", "~\x{00a0}~");
for($i=0; $i<count($data); $i++)
{
$data[$i] = preg_replace($findthis, " ", $data[$i]);
$data[$i] = htmlspecialchars_decode(htmlspecialchars($data[$i], ENT_SUBSTITUTE, 'UTF-8'));
if (empty($data[$i]) ||
mb_strlen($data[$i]) < strlen($data[$i]) ||
is_null($data[$i]) ||
$data[$i] = " " ||
$data[$i] = "" ||
$data[$i] == "0")
{
array_splice($data, $i, 1);
};//end if
};//end for
return $data;
};//end func
空值不会消失,我无法识别它们。
数据:
array (
0 => '
',
1 => 'BEGIN:VCARD
',
2 => '
',
3 => '
',
4 => '
',
5 => '
',
6 => '
',
7 => 'VERSION:2.1
',
... 可能是一些编码问题或什么......它看起来不像多字节字符.. 我得到的结果是:
array (
0 => 'BEGIN:VCARD
',
1 => '
',
2 => '
',
3 => 'VERSION:2.1
',
...
答案 0 :(得分:4)
您可以使用PHP函数array_filter()
删除带回调函数的空值,如下所示
<?php
$array = array("sampe1", "\n ", " ", "sample2", null, "sample4", "rajesh", "suresh", "test", "");
$result = array_filter($array, function($v){
return trim($v);
});
var_dump($result);
$res = array_slice($result);
var_dump($res);
?>
这将打印出来:
array(6) { [0]=> string(6) "sampe1" [3]=> string(7) "sample2" [5]=> string(7) "sample4" [6]=> string(6) "rajesh" [7]=> string(6) "suresh" [8]=> string(4) "test" }
array(6) { [0]=> string(6) "sampe1" [1]=> string(7) "sample2" [2]=> string(7) "sample4" [3]=> string(6) "rajesh" [4]=> string(6) "suresh" [5]=> string(4) "test" }
语法 - 数组array_filter(array $ array [,callable $ callback [,int $ flag = 0]])
答案 1 :(得分:3)
您可以使用PHP函数array_filter()
删除空值
<?php
$array = array("sampe1", "", "sample2", null, "sample4", "rajesh", "suresh", "test", "");
var_dump($array);
echo "<hr/>";
$result = array_filter($array);
var_dump($result);
?>
这将打印出来:
array(9) { [0]=> string(6) "sampe1" [1]=> string(0) "" [2]=> string(7) "sample2" [3]=> NULL [4]=> string(7) "sample4" [5]=> string(6) "rajesh" [6]=> string(6) "suresh" [7]=> string(4) "test" [8]=> string(0) "" }
array(6) { [0]=> string(6) "sampe1" [2]=> string(7) "sample2" [4]=> string(7) "sample4" [5]=> string(6) "rajesh" [6]=> string(6) "suresh" [7]=> string(4) "test"
答案 2 :(得分:2)
不太确定你在你的代码中做了什么,但这里可以删除php数组中的空元素
代码段
<?php
$array = array("apple", "", 2, null, -5, "orange", 10, false, "");
var_dump($array);
echo "<br>";
// Filtering the array
$result = array_filter($array);
var_dump($result);
?>
答案 3 :(得分:1)
删除PHP中的空数组插槽,在数组中留下空洞。
从数组中删除空元素的快速方法是使用array_filter而不使用回调函数。这也将删除0(零)。
$ myArray = array_filter($ myArray);
或者,array_diff允许您决定要保留哪些元素。以下示例仅删除空字符串,但保留0
$ myArray = array_diff($ myArray,array(&#39;&#39;));
在PHP中删除空数组插槽,并压缩数组。
这两个函数都留下了空白条目所在的“空白”。您可以在下面看到它,其中索引是[1]和[3]而不是[0]和[1]。
$ myArray = array(0,&#39; red&#39;,&#39;&#39;,&#39; blue&#39;); print_r(array_filter($ myArray)); 排列 ( [1] =&gt; &#39;红色&#39; [3] =&gt; &#39;蓝色&#39; )
print_r(array_diff($ myArray,array(&#39;&#39;))); 排列 ( [0] =&gt; 0 [1] =&gt; &#39;红色&#39; [3] =&gt; &#39;蓝色&#39; )
array_slice可以消除这些空白:
$ myArray = array(0,&#39; red&#39;,&#39;&#39;,&#39; blue&#39;); $ myArray = array_filter($ myArray); print_r(array_slice($ myArray,0)); 排列 ( [0] =&gt; &#39;红色&#39; [1] =&gt; &#39;蓝色&#39; )
现在你的cas,例如
$ arr = [&#39;&#39;,&#39; BEGIN:VCARD&#39;,&#39;&#39;,&#39;&#39;,&#39;& #39;,&#39;&#39;&#39;&#39;,&#39; VERSION:2.1&#39;]; //初始数组 的print_r($ ARR); $ myArray = array_filter($ arr); print_r(array_slice($ myArray,0));
初始输出:
阵列([0] =&gt; [1] =&gt; BEGIN:VCARD [2] =&gt; [3] =&gt; [4] =&gt; [5] =&gt; [6] =&gt; [7] =&gt;版本:2.1)
最终输出:
数组([0] =&gt; BEGIN:VCARD [1] =&gt;版本:2.1)