Я использую этот код для получения массива из CSV-файла:
array_map('str_getcsv', 'file.csv')
Но как мне установить разделитель для str_getcsv()
при использовании его в функции array_map?
Если вам нужно прикрепить дополнительные параметры к функции, которая требует вызова, то самый простой способ — просто передать функцию-оболочку с предварительно определенными параметрами.
$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);
Других решений пока нет …