Saya mencoba untuk mengonversi berbagai produk menjadi file CSV, tetapi tampaknya tidak sesuai rencana. File CSV adalah satu baris panjang, ini kode saya:
for($i=0;$i<count($prods);$i++) {
$sql = "SELECT * FROM products WHERE id = '".$prods[$i]."'";
$result = $mysqli->query($sql);
$info = $result->fetch_array();
}
$header = '';
for($i=0;$i<count($info);$i++)
{
$row = $info[$i];
$line = '';
for($b=0;$b<count($row);$b++)
{
$value = $row[$b];
if ( ( !isset( $value ) ) || ( $value == "" ) )
{
$value = "\t";
}
else
{
$value = str_replace( '"' , '""' , $value );
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim( $line ) . "\n";
}
$data = str_replace( "\r" , "" , $data );
if ( $data == "" )
{
$data = "\n(0) Records Found!\n";
}
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=your_desired_name.xls");
header("Pragma: no-cache");
header("Expires: 0");
array_to_CSV($data);
function array_to_CSV($data)
{
$outstream = fopen("php://output", 'r+');
fputcsv($outstream, $data, ',', '"');
rewind($outstream);
$csv = fgets($outstream);
fclose($outstream);
return $csv;
}
Selain itu, tajuk tidak memaksa unduhan. Saya telah menyalin dan menempelkan output dan menyimpannya sebagai .csv
EDIT
MASALAH TERPECAHKAN:
Jika ada orang lain yang mencari hal yang sama, temukan cara yang lebih baik untuk melakukannya:
$num = 0;
$sql = "SELECT id, name, description FROM products";
if($result = $mysqli->query($sql)) {
while($p = $result->fetch_array()) {
$prod[$num]['id'] = $p['id'];
$prod[$num]['name'] = $p['name'];
$prod[$num]['description'] = $p['description'];
$num++;
}
}
$output = fopen("php://output",'w') or die("Can't open php://output");
header("Content-Type:application/csv");
header("Content-Disposition:attachment;filename=pressurecsv.csv");
fputcsv($output, array('id','name','description'));
foreach($prod as $product) {
fputcsv($output, $product);
}
fclose($output) or die("Can't close php://output");
Jawaban:
Daripada menuliskan nilai, pertimbangkan untuk menggunakan
fputcsv()
.Ini dapat segera menyelesaikan masalah Anda.
sumber
Ini adalah solusi sederhana yang mengekspor array ke string csv:
sumber
Coba gunakan;
Untuk menghentikan setiap baris baru dalam keluaran CSV Anda.
Saya berasumsi bahwa teksnya membatasi, tetapi tidak berpindah ke baris berikutnya?
Itu adalah konstanta PHP. Ini akan menentukan akhir baris yang benar yang Anda butuhkan.
Windows, misalnya, menggunakan "\ r \ n". Saya merusak otak saya dengan yang satu itu ketika keluaran saya tidak melanggar ke baris baru.
bagaimana menulis baris baru terpadu di PHP?
sumber
Saya tahu ini sudah lama, saya punya kasus di mana saya membutuhkan kunci array untuk disertakan dalam CSV juga, jadi saya memperbarui skrip oleh Jesse Q untuk melakukan itu. Saya menggunakan string sebagai output, karena implode tidak dapat menambahkan baris baru (baris baru adalah sesuatu yang saya tambahkan, dan harus benar-benar ada di sana).
Harap dicatat, ini hanya berfungsi dengan array nilai tunggal
(key, value)
. tetapi dapat dengan mudah diperbarui untuk menangani multi-dimensi(key, array())
.sumber
Dalam kasus saya, array saya multidimensi, berpotensi dengan array sebagai nilai. Jadi saya membuat fungsi rekursif ini untuk menghancurkan array sepenuhnya:
Karena berbagai tingkat array saya tidak cocok dengan format CSV datar, saya membuat kolom kosong dengan kunci sub-array untuk berfungsi sebagai "pengantar" deskriptif ke tingkat data berikutnya. Output sampel:
Anda dapat dengan mudah menghapus kolom "intro" (deskriptif) itu, tetapi dalam kasus saya, saya memiliki tajuk kolom berulang, yaitu inbound_leads, di setiap sub-larik, sehingga memberi saya jeda / judul sebelum bagian berikutnya. Menghapus:
setelah is_array () untuk memadatkan kode lebih lanjut dan menghapus kolom ekstra.
Karena saya menginginkan baris judul dan baris data, saya meneruskan dua variabel ke dalam fungsi dan setelah menyelesaikan panggilan ke fungsi tersebut, akhiri keduanya dengan PHP_EOL:
Ya, saya tahu saya meninggalkan koma ekstra, tetapi demi singkatnya, saya tidak menanganinya di sini.
sumber
Array data diubah menjadi format 'teks / csv' csv dengan fungsi php bawaan fputcsv menangani koma, tanda kutip, dan lain-lain.
Lihat
https://coderwall.com/p/zvzwwa/array-to-comma-separated -string-in-php
http://www.php.net/manual/en/function.fputcsv.php
sumber
Itu berhasil untuk saya.
sumber