У меня есть массив, который я хочу экспортировать в CSV-файл, теперь я знаю, что есть функция fputcsv, но я использую версию 5.0.4 PHP, поэтому для меня это не вариант.
Есть ли альтернативный метод, который я могу использовать?
Предполагая, что у вас есть массив $Data
, который содержит отдельные массивы для каждого реестра (или строки), вы можете попробовать следующее:
$Delimiter = '"'; $Separator = ',' foreach($Data as $Line) { fwrite($File, $Delimiter. implode($Delimiter.$Separator.$Delimiter, $Line).$Delimiter."\n"); }
Где $File
– это дескриптор вашего файла. Поместите в $Delimiter
, символ, который вы хотите разместить вокруг каждого поля, и в $Separator
, символ для использования между полями.
Для этого вы можете использовать polyfill. напишите свой код так, как если бы вы fputcsv
в системе, поддерживающей fputcsv
Из комментариев внутри php-блока (с некоторым небольшим кодом кадрирования), но fputcsv
это (скопировано и слегка изменено с http://www.php.net/manual/en/function .fputcsv.php # 56827 )
<?php if (!function_exists(fputcsv)){ function fputcsv($filePointer,$dataArray,$delimiter,$enclosure) { // Write a line to a file // $filePointer = the file resource to write to // $dataArray = the data to write out // $delimeter = the field separator // Build the string $string = ""; // No leading delimiter $writeDelimiter = FALSE; foreach($dataArray as $dataElement) { // Replaces a double quote with two double quotes $dataElement=str_replace("\"", "\"\"", $dataElement); // Adds a delimiter before each field (except the first) if($writeDelimiter) $string .= $delimiter; // Encloses each field with $enclosure and adds it to the string $string .= $enclosure . $dataElement . $enclosure; // Delimiters are used every time except the first. $writeDelimiter = TRUE; } // end foreach($dataArray as $dataElement) // Append new line $string .= "\n"; // Write the string to the file fwrite($filePointer,$string); } } ?>