Bạn có thể sử dụng fputcsv [] được tích hợp cho các mảng của mình để tạo các dòng CSV chính xác từ mảng của bạn, vì vậy bạn sẽ phải lặp lại và thu thập các dòng, như thế này:
$f = fopen["tmp.csv", "w"];
foreach [$array as $line] {
fputcsv[$f, $line];
}
Để làm cho các trình duyệt cung cấp hộp thoại "Lưu AS", bạn sẽ phải gửi các tiêu đề HTTP như thế này [xem thêm về tiêu đề này trong RFC]:
header['Content-Disposition: attachment; filename="filename.csv";'];
Để tất cả chúng cùng nhau:
function array_to_csv_download[$array, $filename = "export.csv", $delimiter=";"] {
// open raw memory as file so no temp files needed, you might run out of memory though
$f = fopen['php://memory', 'w'];
// loop over the input array
foreach [$array as $line] {
// generate csv lines from the inner arrays
fputcsv[$f, $line, $delimiter];
}
// reset the file pointer to the start of the file
fseek[$f, 0];
// tell the browser it's going to be a csv file
header['Content-Type: text/csv'];
// tell the browser we want to save it instead of displaying it
header['Content-Disposition: attachment; filename="'.$filename.'";'];
// make php send the generated csv lines to the browser
fpassthru[$f];
}
Và bạn có thể sử dụng nó như thế này:
array_to_csv_download[array[
array[1,2,3,4], // this array is going to be the first row
array[1,2,3,4]], // this array is going to be the second row
"numbers.csv"
];
Cập nhật: Thay vì php://memory
, bạn cũng có thể sử dụng php://output
cho bộ mô tả tệp và loại bỏ việc tìm kiếm và như vậy:
Instead of the php://memory
you can also use the php://output
for the file descriptor and do away with the seeking and
such:
function array_to_csv_download[$array, $filename = "export.csv", $delimiter=";"] {
header['Content-Type: application/csv'];
header['Content-Disposition: attachment; filename="'.$filename.'";'];
// open the "output" stream
// see //www.php.net/manual/en/wrappers.php.php#refsect2-wrappers.php-unknown-unknown-unknown-descriptioq
$f = fopen['php://output', 'w'];
foreach [$array as $line] {
fputcsv[$f, $line, $delimiter];
}
}
Định dạng tệp các giá trị được phân tách bằng dấu phẩy [CSV] là phương tiện được hỗ trợ rộng rãi nhất để biểu diễn dữ liệu bảng. Bao gồm tính năng xuất CSV trong ứng dụng web cho phép dữ liệu của nó được xử lý bởi các ứng dụng khác, tăng giá trị của nó cho người dùng.
Các tiêu đề HTTP đầu ra của dòng 1 và 2 tuyên bố rằng nội dung là dữ liệu CSV được mã hóa UTF-8 và trình duyệt sẽ cung cấp để tải xuống. Tiêu đề Content-Disposition
không chỉ đảm bảo tệp được cung cấp dưới dạng tải xuống thay vì được hiển thị trong trình duyệt mà còn cho phép một tên tệp được đề xuất - ____10 trong ví dụ này - thay vì để lại trình duyệt để tạo tên tệp dựa trên URL.
Dòng 4 tạo một con trỏ tệp có thể được sử dụng để ghi vào luồng đầu ra PHP, sau đó các dòng 5 và 6 sử dụng hàm
header['Content-Disposition: attachment; filename="filename.csv";'];
1 để xuất một hàng tiêu đề và một hàng dữ liệu.
|
|
Dòng 7 đến 11 truy vấn cơ sở dữ liệu cho danh sách người dùng. Cờ
header['Content-Disposition: attachment; filename="filename.csv";'];
2 tránh được một bản sao thêm dữ liệu được giữ trong bộ nhớ, cho phép xuất các tệp CSV lớn hơn. Các dòng 12 đến 14 sau đó xuất mỗi hàng được trả về bởi truy vấn.