Php 删除字符串数组中的空字符串
似乎有几十个主题都有类似的问题,而且大多数都有相同的答案:使用Php 删除字符串数组中的空字符串,php,arrays,csv,Php,Arrays,Csv,似乎有几十个主题都有类似的问题,而且大多数都有相同的答案:使用array\u filter,array\u map。问题是我用过它们,但没什么用。因此,我有一个数组(由csv文件中的数据构建): 我必须删除所有空数组。所以我使用这样的代码: while (($row = fgetcsv($file, 8192, ';')) !== false) { if (array(null) !== $row) { // ignore blank lines
array\u filter
,array\u map
。问题是我用过它们,但没什么用。因此,我有一个数组(由csv文件中的数据构建):
我必须删除所有空数组。所以我使用这样的代码:
while (($row = fgetcsv($file, 8192, ';')) !== false) {
if (array(null) !== $row) { // ignore blank lines
$csv[] = $row;
}
}
$array = array_filter(array_map('array_filter', $csv));
$array现在是:
Array
(
[0] => Array
(
[0] => name
[1] => title
[2] => email
)
[1] => Array
(
[0] => First
[1] => title 1
[2] => email1@ex.com
)
[2] => Array
(
[0] => second
[1] => title 1
[2] => email2@ex.com
)
[3] => Array
(
[0] => third
[1] => title 1
[2] => email3@ex.com
)
[4] => Array
(
[1] =>
)
)
为什么第四个数组的值为空?我需要把它处理掉。
gettype($array[4][1])
=string
更新
csv有空行,甚至只有一个“;”分隔符,没有任何字符串。我无法影响将数据插入此csv的过程。
csv如下所示:
1 row: name;title;email
2 row: First;title 1;email1@ex.com
3 row: second;title 1;email2@ex.com
4 row:
5 row: third;title 1;email3@ex.com
6 row:
7 row: ; ;
大多数都有相同的答案:使用数组过滤器,数组映射
array_filter是一种很好的方法,但我不会使用array_map,而是array_reduce:
$array=array\u过滤器(
$csv,
函数($value){
返回0
使用array_reduce,我计算数组中的非空元素。如果有零个非空元素,则使用array_filter丢弃该数组
作为参考,PHP7.4-syntax在我看来更好,但一开始可能有点混乱
$array=array\u过滤器(
$csv,
fn($val)=>0空(修剪($item))?$carry:$carry+1,
0
)
);
它看起来像[6][1]中的元素,因为其中有一些空格。你们是对的。有空行。我将用csv数据更新帖子,这样你们就可以看到它是如何工作的。这对我来说是新的。那很有效!感谢您不仅提供了解决方案,还提供了解释。非常有帮助!只是一个简单的问题:PHP7.4-syntax第二个0
代表什么?哦,对不起。第一次忘了。它是$carry
的默认参数。请看这里:
1 row: name;title;email
2 row: First;title 1;email1@ex.com
3 row: second;title 1;email2@ex.com
4 row:
5 row: third;title 1;email3@ex.com
6 row:
7 row: ; ;