繁体   English   中英

将array_filter()与返回数组的回调一起使用

[英]Using array_filter() with a callback that returns an array

我有这样的数据:

a|b|c|d|e|f|g
h|i|j|k|l|m|n
o|p|q|r|s|t|u

我可以轻松地使用explode("\\n", $data)来获取所有行的数组(这是一个〜4.0GB的文件),但是现在我想通过使用基于explode()方法使其成为多维数组在垂直管道上。 这是我尝试过的:

$data = explode("\n", './path-to-file.txt');
$results = array_filter($data, function ($el) {
   return explode('|', $el);
});

但是,这将导致一维数组,原始行为字符串形式。

如何在碰巧返回数组的回调中使用array_filter()

编辑:我可以使用foreach($data as $datum)并以这种方式进行explode() ,但是当我尝试这样做时,我使用的RAM量大约是文件大小的四倍,这是不希望的。 这似乎是使用回调函数的绝好机会,但是我似乎无法使用array_filter()做到这array_filter()

array_filter()元素进行过滤以包括或排除它们,并期望true包括元素或false排除。 使用array_map()

$data = explode("\n", './path-to-file.txt');
$results = array_map(function ($el) {
   return explode('|', $el);
}, $data);

一种内存效率更高的方法是逐行读取:

if(($handle = fopen("./path-to-file.txt", "r")) !== false) {
    while(($results[] = fgetcsv($handle, 0, "|")) !== false) {}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM