我有这个数组:
$aryMain = array(array('hello','bye'), array('',''),array('',''));
它是通过读取csv文件而形成的,数组('','')是文件末尾的空行。
如何删除它们?
我试过了:
$aryMain = array_filter($aryMain);
但它不起作用:(
非常感谢!
答案 0 :(得分:17)
添加到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
(
)
)
答案 1 :(得分:9)
使用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
答案 2 :(得分:2)
在主阵列上应用array_filter()
,然后再在内部元素上应用{<1}}:
$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);
});
是否更有效率是有争议的,但它应该节省一些记忆:)