Ich bin ein Anfänger im Programmieren und habe viel nach meiner Frage gesucht, aber keine hilfreiche Lösung oder ein Tutorial dazu gefunden.
Mein Ziel ist es, ein PHP-Array zu haben und die Array-Elemente werden in einer Liste auf der Seite angezeigt.
Ich möchte eine Option hinzufügen, damit ein Benutzer, wenn er möchte, eine CSV-Datei mit Array-Elementen erstellen und herunterladen kann.
Ich weiß nicht, wie ich das machen soll. Ich habe auch viel gesucht. Aber noch keine hilfreiche Ressource zu finden.
Bitte geben Sie mir ein Tutorial oder eine Lösung oder einen Rat, um es selbst zu implementieren. Da ich ein Anfänger bin, bieten Sie bitte einfach zu implementierende Lösungen an.
Mein Array sieht aus wie:
Array
(
[0] => Array
(
[fs_id] => 4c524d8abfc6ef3b201f489c
[name] => restaurant
[lat] => 40.702692
[lng] => -74.012869
[address] => new york
[postalCode] =>
[city] => NEW YORK
[state] => ny
[business_type] => BBQ Joint
[url] =>
)
)
php
export-to-csv
user2302780
quelle
quelle
Antworten:
Sie können das integrierte fputcsv () für Ihre Arrays verwenden, um korrekte CSV-Zeilen aus Ihrem Array zu generieren. Sie müssen also die Zeilen wie folgt durchlaufen und sammeln:
Damit die Browser das Dialogfeld "Speichern unter" anbieten, müssen Sie HTTP-Header wie folgt senden (weitere Informationen zu diesem Header finden Sie im RFC ):
Alles zusammen:
Und Sie können es so verwenden:
Update:
Anstelle von
php://memory
können Sie auch dasphp://output
für den Dateideskriptor verwenden und das Suchen und dergleichen abschaffen:quelle
echo
die generierten CSV-Zeilen direkt in der Schleife?fputcsv()
die generierte Zeile nicht zurückgegeben wird, sondern ein Dateideskriptor zum Schreiben benötigt wird. Sie können den Puffer jedoch bei jeder Iteration zurückspulen, schreiben und löschen, wenn der Speicher eingeschränkt ist. Oder verwenden Sie stattdessen einfach eine echte temporäre Datei.$data = array_merge(array(array_keys($data[0])), $data);
php://output
siehe das zweite aktualisierte Codebeispiel.Ich habe nicht genug Ruf, um auf die @ complex857-Lösung zu antworten. Es funktioniert großartig, aber ich musste hinzufügen; am Ende des Content-Disposition-Headers. Ohne diese Option fügt der Browser am Ende des Dateinamens zwei Bindestriche hinzu (z. B. wird anstelle von "export.csv" die Datei als "export.csv--" gespeichert). Wahrscheinlich wird versucht, \ r \ n am Ende der Kopfzeile zu bereinigen.
Die richtige Zeile sollte folgendermaßen aussehen:
Falls in CSV UTF-8-Zeichen enthalten sind, müssen Sie die Codierung in UTF-8 ändern, indem Sie die Zeile Inhaltstyp ändern:
Außerdem finde ich es eleganter, rewind () anstelle von fseek () zu verwenden:
Vielen Dank für Ihre Lösung!
quelle
--
am Ende der Dateinamen noch nie selbst erlebt , aber ich habe die Antwort aktualisiert (warum nicht einfach eine Bearbeitung einreichen?)Versuchen Sie ... CSV-Download.
quelle
Das ist die Funktion, die ich für mein Projekt verwendet habe und die wie erwartet funktioniert.
quelle
Verwenden Sie den folgenden Code, um ein PHP-Array in CSV zu konvertieren
quelle
Wenn Ihre Array-Struktur immer genau so mehrdimensional ist, können wir die Elemente wie folgt durchlaufen:
Das ist eine Möglichkeit, dies zu tun ... Sie können es manuell tun, aber diese Möglichkeit ist schneller und einfacher zu verstehen und zu lesen.
Dann würden Sie Ihre Header etwas verwalten, was complex857 tut, um die Datei auszuspucken. Sie können die Datei dann mit unlink () löschen, wenn Sie sie nicht mehr benötigen, oder Sie können sie auf dem Server belassen, wenn Sie dies wünschen.
quelle
Verwenden Sie Folgendes:
quelle