PHP:删除多维数组中的空数组字符串[重复]

Posted

技术标签:

【中文标题】PHP:删除多维数组中的空数组字符串[重复]【英文标题】:PHP: remove empty array strings in multidimensional array [duplicate] 【发布时间】:2013-05-08 08:48:24 【问题描述】:

我有这个数组:

$aryMain = array(array('hello','bye'), array('',''),array('','')); 

它是通过读取一个csv文件形成的,数组('','')是文件末尾的空行。

如何删除它们?

我试过了:

$aryMain = array_filter($aryMain);  

但它不起作用:(

非常感谢!

【问题讨论】:

为什么不首先跳过那些空行? 【参考方案1】:

补充 Rikesh 的回答:

<?php
$aryMain = array(array('hello','bye'), array('',''),array('','')); 
$aryMain = array_filter(array_map('array_filter', $aryMain));
print_r($aryMain);

?>

将他的代码粘贴到另一个 array_filter 将摆脱整个数组本身。

Array
(
    [0] => Array
        (
            [0] => hello
            [1] => bye
        )

)

相比:

$aryMain = array_map('array_filter', $aryMain);

Array
(
    [0] => Array
        (
            [0] => hello
            [1] => bye
        )

    [1] => Array
        (
        )

    [2] => Array
        (
        )

)

【讨论】:

@MiguelMas 请记住,'0' 之类的字符串也会以这种方式被删除。【参考方案2】:

array_map 与array_filter 一起使用,

$array = array_filter(array_map('array_filter', $array));

或者只是创建一个array_filter_recursive 函数

function array_filter_recursive($input) 
 
   foreach ($input as &$value) 
     
      if (is_array($value)) 
       
         $value = array_filter_recursive($value); 
       
        
   return array_filter($input); 
 

DEMO.

注意:这将删除包含“0”的项目(即带有数字零的字符串)。只需将'strlen' 作为第二个参数传递以保留0

【讨论】:

因为 strlen 小费而投了赞成票!【参考方案3】:

在主数组上应用array_filter(),然后再在内部元素上应用一次:

$aryMain = array_filter($aryMain, function($item) 
    return array_filter($item, 'strlen');
);

内部array_filter()具体使用strlen()判断元素是否为空;否则它也会删除'0'

要确定数组是否为空,您还可以使用array_reduce()

array_filter($aryMain, function($item) 
    return array_reduce($item, function(&$res, $item) 
        return $res + strlen($item);
    , 0);
);

这是否更有效是有争议的,但它应该节省一些内存:)

【讨论】:

以上是关于PHP:删除多维数组中的空数组字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 中的多维数组中删除重复值

如果两个值匹配,则从 php 中的多维关联数组中删除重复项

从php中的多维数组中删除重复值

如何从 PHP 中的多维数组中删除重复值 [重复]

php 清除多维数组里面的空值

php中的二维多维数组到一维数组[重复]