7

我有这个数组:

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

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

我怎样才能删除它们?

我试过了:

$aryMain = array_filter($aryMain);  

但它不工作:(

非常感谢!

4

3 回答 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
        (
        )

)
于 2013-05-14T07:05:50.240 回答
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

于 2013-05-14T07:01:46.873 回答
2

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

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

innerarray_filter()具体用来strlen()判断元素是否为空;否则它也会'0'被删除。

要确定数组的空性,您还可以使用array_reduce()

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

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

于 2013-05-14T07:08:26.967 回答