Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除字符串数组中的空字符串_Php_Arrays_Csv - Fatal编程技术网

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: ; ;