【问题标题】:Passing two arguments to the function inside of array_map将两个参数传递给 array_map 内部的函数
【发布时间】:2016-05-27 08:35:37
【问题描述】:

我正在解析 CSV 文件,大型 CSV 文件,我需要解析 str_getcsv 函数的第二个参数(分隔符),但老实说我不知道​​如何......

我试图绕过数组映射函数,但是 php 向我抛出了一个错误,即超出了允许的内存大小。我也尝试了array_walk,但得到了相同的结果。

这是函数现在的样子......

function parseIt($file)
{
    $file = file($file);
    // foreach ($file as $key => $value)
    // {
    //     $rows[] = str_getcsv($value, ';');
    //     unset($file[$key]);
    // }
    // array_walk($file, function(&$item)
    // {
    //     $item = str_getcsv($item, ';');
    // });

    // exit();
    return array_map('str_getcsv', file($file));
}

所以,现在,我正试图弄清楚如何通过 array_map 将第二个参数传递给 str_getcsv...

【问题讨论】:

  • $delimiter = ';'; return array_map(function ($value) use ($delimiter) return str_getcsv($value, $delimiter); }, file($file));
  • 但是,如果您正在处理大型 csv 文件,那么这种将整个文件加载到内存中的方法可能不是一个好主意
  • 我不确定这能解决内存问题
  • @MarkBaker 你是对的。它不起作用,这是一个坏主意......加载整个文件,也就是说。
  • 使用 fgetcsv() 在单个语句中读取和解析最容易一次读取一行

标签: php parsing csv


【解决方案1】:

你可以在array_map中设置分隔符,但是:

<?php

$string = [
    "this;is;a;string;aaa",
    "this2;is;a;string;aaa",
    "this3;is;a;string;aaa",
    "this4;is;a;string;aaa",
];

$output = array_map('str_getcsv', $string, [";", ";", ";", ";", ]);

[";"] 中,您必须在输入数组中放置与行一样多的分隔符,例如在示例中。

str_getcsv 中的其他参数可以用同样的方式完成。

【讨论】:

  • 虽然这个答案不能解决我的问题,因为内存的原因,考虑到这个问题,它绝对是正确的答案,所以+1。 :)
猜你喜欢
  • 2015-02-20
  • 2018-09-26
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 2021-09-21
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多