excel — генерация файлов с разделителями-запятыми в PHP

Я использую этот код для создания файла с разделителями точкой с запятой:

for ($i = 0; $i < 3; $i = $i+1)
{
array_push($dataArray,"$dataCell1","$dataCell2","$dataCell3","$dataCell4","$dataCell5","$dataCell6","$dataCell7","$dataCell8","$dataCell9","$dataCell10","$dataCell11");

$stringData = rtrim(implode(';', $dataArray), ';'); //rtrim will prevent the last cell to be imploded by ';'

$stringData .= "\r\n";
}

Что я хочу это:

введите описание изображения здесь

(Данные разделяются точкой с запятой, а строки — новой строкой)

Что я получаю это:
введите описание изображения здесь
(Данные разделяются точкой с запятой, но новые строки не добавляются, все данные отображаются в виде строки sngle)

Пожалуйста, скажите мне, что я делаю не так ..

2

Решение

Ваша проблема в вашей логике. Вы продолжаете добавлять данные к вашему $ dataArray с каждой итерацией, в то время как следующий оператор в вашем коде установит stingData в значение imploded $ dataArray. ТОЛЬКО В ПОСЛЕДНЕЙ ПЕТЛЯ. И в этот момент $ dataArray содержит все значения данных, потому что вы продолжали нажимать на него в течение 3 итераций.

$stringData = rtrim(...)

Что вы хотите сделать, это:

<?php

//concatenation string
$stringData = '';

for ($i = 0; $i < 3; $i = $i+1)
{
//init the array with every iteration.
$dataArray = array();

//push your values
array_push($dataArray,"$dataCell1","$dataCell2","$dataCell3","$dataCell4","$dataCell5","$dataCell6","$dataCell7","$dataCell8","$dataCell9","$dataCell10","$dataCell11");

//concatenate
$stringData  .= rtrim(implode(';', $dataArray), ';');

//new line
$stringData .= "\r\n";
}

//print
echo $stringData . "\n";
?>
1

Другие решения

использование fputcsv вместо:

// indexed array of data
$data = [
['col1' => 1, 'col2' => 2, 'col3' => 3],
['col1' => 6, 'col2' => 7, 'col3' => 9],
['col1' => 5, 'col2' => 8, 'col3' => 15],
]

// add headers for each column in the CSV download
array_unshift($data, array_keys(reset($data)));

$handle = fopen('php://output', 'w');
foreach ($data as $row) {
fputcsv($handle, $row, ';', '"');
}
fclose($handle);
0

Для создания CSV-файла, fputcsv это действительно лучший метод.

Сначала начните с сохранения ваших данных в «массиве массивов». Это облегчает обработку данных:

$dataArray = array();

for ($i = 0; $i < 3; $i = $i+1)
$dataArray[$i] = array($dataCell1,$dataCell2,$dataCell3,$dataCell4,$dataCell5,$dataCell6,$dataCell7,$dataCell8,$dataCell9,$dataCell10,$dataCell11);

Затем нам нужно создать дескриптор временного файла, а также убедиться, что у нас есть права для этого. Затем мы сохраним все записи массива во временном файле с правильным разделителем.

$handle = fopen('php://temp', 'r+');

foreach($dataArray as $line)
fputcsv($handle, $line, ';', '"');

rewind($handle);

Если вы просто хотите распечатать результаты на странице, подойдет следующий код:

$contents = "";

while(!feof($handle))
$contents .= fread($handle, 8192);

fclose($handle);

echo $contents;

Помните, что в простом html разрывы строк не отображаются. Однако если вы проверите исходный код полученной страницы, вы увидите разрывы строк.

Но если вы также хотите сохранить значения в загружаемом CSV-файле, вам понадобится следующий код:

$fileName = "file.csv";
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="' . $fileName . '";');
fpassthru($handle);
fclose($handle);
0
По вопросам рекламы [email protected]