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:删除多维数组中的空数组字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章