2017-01-12 2 views
0

Ich habe ein Array wie folgt:Wie erstellt man eine herunterladbare CSV-Datei von einem Array?

 $data = [ 
    ["firstname" => "Mary", "lastname" => "Johnson", "age" => 25], 
    ["firstname" => "Amanda", "lastname" => "Miller", "age" => 18], 
    ["firstname" => "James", "lastname" => "Brown", "age" => 31], 
    ["firstname" => "Patricia", "lastname" => "Williams", "age" => 7], 
    ["firstname" => "Michael", "lastname" => "Davis", "age" => 43], 
    ["firstname" => "Sarah", "lastname" => "Miller", "age" => 24], 
    ["firstname" => "Patrick", "lastname" => "Miller", "age" => 27] 
]; 

ich eine herunterladbare CSV-Datei aus diesem Array in PHP erstellen möchten. wie folgt aus:

enter image description here

Unicode UTF-8 zu wichtig ist.

Ich habe die Lösung gefunden:

<?PHP 

function cleanData(&$str) 
{ 
if($str == 't') $str = 'TRUE'; 
if($str == 'f') $str = 'FALSE'; 
if(preg_match("/^0/", $str) || preg_match("/^\+?\d{8,}$/", $str) ||   preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)) { 
    $str = "'$str"; 
    } 
    if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"'; 
    $str = mb_convert_encoding($str, 'UTF-16LE', 'UTF-8'); 

}

// filename for download 
$filename = "website_data_" . date('Ymd') . ".csv"; 

header("Content-Disposition: attachment; filename=\"$filename\""); 
header("Content-Type: text/csv; charset=UTF-16LE"); 

$out = fopen("php://output", 'w'); 

$flag = false; 
foreach ($data as $row) { 
    if(!$flag) { 
    // display field/column names as first row 
    fputcsv($out, array_keys($row), ',', '"'); 
    $flag = true; 
    } 
    array_walk($row, __NAMESPACE__ . '\cleanData'); 
    fputcsv($out, array_values($row), ',', '"'); 
} 

fclose($out); 
exit; 
?> 

es funktioniert und schafft CSV-Datei, aber es persischer Chars unlesbar zeigen.

+0

getan werden, Das ist ganz einfach, so was haben Sie versucht? – RiggsFolly

+0

Dieser Screenshot zeigt keine CSV-Datei, sondern eine Tabellenkalkulationsanwendung. – arkascha

+0

Sie müssen dafür keine physische Datei erstellen. Sie senden einfach einen MIME-Typ-Header für das CSV-Format und dann die Daten selbst. Das ist die ganze Magie. – arkascha

Antwort

0

Verwenden http://php.net/manual/en/function.fputcsv.php

$fp = fopen('php://output', 'w'); 
fputcsv($fp, array_keys($data[0])); 

foreach ($data as $row) { 
    fputcsv($fp, array_values($row)); 
} 

fclose($fp); 

das Array UTF8 kann, ist mit so etwas wie

$dataUTF8 = array_map("utf8_encode", $data); 
+0

keine Notwendigkeit, eine tatsächliche Datei zu erstellen '$ fp = fopen ('php: // output', 'w');' – nogad

+0

Sie haben Recht. Ich habe die Antwort aktualisiert. Es wird den CSV-Inhalt an den Browser ausgeben. – cornelb

+0

Es beantwortet auch nicht alle Fragen, wie auch immer die Sup. – RiggsFolly

Verwandte Themen