php删除数组中的“空”值

时间:2017-03-25 18:36:28

标签: php

我正在尝试使用以下函数从空值中清除数组:

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 
',

...

4 个答案:

答案 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)