PHP:删除多维数组中的空字符串数组

7

我有这个数组:

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

这是由读取 CSV 文件形成的,而 array('','') 则是文件末尾的空行。

如何移除这些空行呢?

我尝试了:

$aryMain = array_filter($aryMain);  

但是它没有起作用 :(
非常感谢!

2
为什么不一开始就跳过那些空行呢? - Ja͢ck
3个回答

18
补充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' 这样的字符串也将以这种方式被删除。 - Ja͢ck

10

使用 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); 
} 

演示。

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


1
因为strlen提示而点赞! - MarkokraM

2

在主数组上应用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);
});

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接