如何在array_map()中为我的回调函数使用参数/参数?

时间:2015-08-07 14:18:56

标签: php callback anonymous-function array-map

我使用此代码从csv文件中获取数组:

array_map('str_getcsv', 'file.csv')

但是如何在array_map函数中使用str_getcsv()设置分隔符?

1 个答案:

答案 0 :(得分:11)

如果你需要将附加参数附加到需要可调用的函数,最简单的方法就是传递一个预定义参数的包装函数

$array = array_map(function($d) {
    return str_getcsv($d, "\t");
}, file("file.csv"));

或者,您可以使用带有闭包的use()语法传递参数。

$delimiter = "|";
$array = array_map(function($d) use ($delimiter) {
    return str_getcsv($d, $delimiter);
}, file("file.csv"));

使用此技术可以完成的另一个有趣的事情是创建一个函数,该函数返回内置预定义值的函数。

function getDelimitedStringParser($delimiter, $enclosure, $escapeChar){
    return function ($str) use ($delimiter, $enclosure, $escapeChar) {
        return str_getcsv($str, $delimiter, $enclosure, $escapeChar);
    };
}

$fileData = array_map("trim", file("myfile.csv"));
$csv = array_map(getDelimitedStringParser(",", '"', "\\"), $fileData);