【问题标题】:php remove "empty" values in arrayphp删除数组中的“空”值
【发布时间】:2017-03-25 18:36:27
【问题描述】:

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

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

...

【问题讨论】:

  • 请发布您的数据
  • @LeoTahk 检查我在下面提供的解决方案
  • 是的,修剪工作,感谢您指出。标记为已回答。简单的 array_filter 没有效果。

标签: php


【解决方案1】:

您可以使用 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】:

    您可以使用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 [, callable $callback [, int $flag = 0]])

    【讨论】:

      【解决方案3】:

      不太确定你在你的代码中做了什么,但这里有一些可以从 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);
      ?>
      

      【讨论】:

      • 我想这不会删除像 "\n\n""\r\n" 这样的值
      【解决方案4】:

      移除 PHP 中的空数组槽,在数组中留下空洞。

      从数组中删除空元素的快速方法是使用不带回调函数的 array_filter。不过,这也会删除 0(零)。

      $myArray = array_filter($myArray);

      或者,array_diff 允许您决定要保留哪些元素。以下示例只会删除空字符串,但保留 0

      $myArray = array_diff($myArray, array(''));

      删除 PHP 中的空数组槽,并压缩数组。

      这两个函数都在原来的空条目处留下了“空白”。您可以在下面看到它,其中索引是 [1] 和 [3] 而不是 [0] 和 [1]。

      $myArray = array(0, '红色', '', '蓝色'); print_r(array_filter($myArray)); 大批 ( [1] => '红色' [3] => '蓝色' )

      print_r(array_diff($myArray, array(''))); 大批 ( [0] => 0 [1] => '红色' [3] => '蓝色' )

      array_slice 可以消除这些差距:

      $myArray = array(0, '红色', '', '蓝色'); $myArray = array_filter($myArray); print_r(array_slice($myArray, 0)); 大批 ( [0] => '红色' [1] => '蓝色' )

      现在为你的案例,示例

      $arr = ['','BEGIN:VCARD','','','','','','VERSION:2.1']; //初始数组 print_r($arr); $myArray = array_filter($arr); print_r(array_slice($myArray, 0));

      初始输出:

      数组 ( [0] => [1] => BEGIN:VCARD [2] => [3] => [4] => [5] => [6] => [7] => 版本: 2.1)

      最终输出:

      数组([0] => BEGIN:VCARD [1] => VERSION:2.1)

      【讨论】:

      • 我刚刚使用了 $fileContents = array_filter( $fileContents ); print_r(array_slice($fileContents, 0));结果是:数组( [0] => [1] => BEGIN:VCARD [2] => [3] => [4] => [5] => [6] => [7] => VERSION :2.1 .. 未删除 :/
      • $arr = ['','BEGIN:VCARD','','','','','','VERSION:2.1'];下一个: print_r($arr); $myArray = array_filter($arr); print_r(array_slice($myArray, 0));初始输出:数组( [0] => [1] => BEGIN:VCARD [2] => [3] => [4] => [5] => [6] => [7] => 版本: 2.1)最终输出:数组([0] => BEGIN:VCARD [1] => VERSION:2.1)
      • 我的数据的工作版本是:$array= array_filter($array, function($v){return trim($v);}); $array= array_slice($array, 0 , count($array));
      猜你喜欢
      • 2016-05-23
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      相关资源
      最近更新 更多