我有这个数组:
$aryMain = array(array('hello','bye'), array('',''),array('',''));
这是由读取 CSV 文件形成的,而 array('','') 则是文件末尾的空行。
如何移除这些空行呢?
我尝试了:
$aryMain = array_filter($aryMain);
但是它没有起作用 :(
非常感谢!
我有这个数组:
$aryMain = array(array('hello','bye'), array('',''),array('',''));
这是由读取 CSV 文件形成的,而 array('','') 则是文件末尾的空行。
如何移除这些空行呢?
我尝试了:
$aryMain = array_filter($aryMain);
<?php
$aryMain = array(array('hello','bye'), array('',''),array('',''));
$aryMain = array_filter(array_map('array_filter', $aryMain));
print_r($aryMain);
?>
Array
(
[0] => Array
(
[0] => hello
[1] => bye
)
)
相较于:
$aryMain = array_map('array_filter', $aryMain);
Array
(
[0] => Array
(
[0] => hello
[1] => bye
)
[1] => Array
(
)
[2] => Array
(
)
)
'0'
这样的字符串也将以这种方式被删除。 - Ja͢ck使用 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
。
在主数组上应用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);
});