2016-05-31 2 views
0

Ich habe die Daten in einem Textformat gespeichert und PHP verwendet, um eine zufällige Zeile in der Datei zu erhalten und in JSON zu konvertieren. Der Code war wie folgt:Konvertieren einer CSV in ein bestimmtes JSON-Format und Ausgabe einer zufälligen Zeile

<?php 
    // open the text file 
    $Textfile = file('file.txt', FILE_IGNORE_NEW_LINES); 
    // get a random line 
    $rand = mt_rand(0, count($Textfile)-1); 
    // set content title 
    $title = "Same Title"; 
    // set a random content 
    $content = $Textfile[$rand]; 
    // result 
    $result = array('content' => $content, 
        'title'  => $title); 
    // set header 
    header('Content-Type: application/json'); 
    // print the random quote 
    echo json_encode($result); 
?> 

Die Json Ausgabe lautet:

{"content":"some random content from a book","title":"Same Title"} 

Aber ich bin das Hinzufügen von mehr Bücher so habe ich beschlossen, die Datei im CSV-Format zu erstellen. Die CSV hat die folgende Struktur:

ID | title    | content   | page 
1 | some unique title | some content  | 25 
2 | some other title | some other cont | 12 

so die gewünschte Ausgabe sein wird:

{"ID":"1", "title":"some unique title", "content":"some content", "page", "25"} 

Ich habe versucht, meine vorhandenen PHP-Code zu verwenden und einfach die csv öffnen statt der Textdatei:

<?php 
    // read the csv file 
    $file="newformat.csv"; 
    $csv= file_get_contents($file); 
    // create the array 
    $array = array_map("str_getcsv", explode("\n", $csv)); 
    $json = json_encode($array); 

    // set header 
    header('Content-Type: application/json'); 
    // print 
    echo json_encode($json); 
?> 

aber dies gibt nicht die gleiche Ausgabe wie die vorherige und ich bin mir nicht sicher, wie Sie die zufällige Zeile implementieren.

Irgendwelche Vorschläge, wie man das erreicht?

Antwort

0

Dadurch wird der Inhalt der CSV-Datei abgerufen, in Zeilen aufgeteilt, eine zufällige Zeilennummer abgerufen, diese Zeile aus CSV analysiert und die Werte den gewünschten Schlüsseln zugewiesen und anschließend JSON-codiert.

<?php 
    const KEYS = ['ID', 'title', 'content', 'page']; 

    $file = 'newformat.csv'; 
    $csv = file_get_contents($file); 
    $lines = explode("\n", $csv); 
    $num = count($lines); 

    $randomLineNumber = rand(0, $num - 1); // get random line number 
    $line = $lines[$randomLineNumber];  // get random line 
    $array = array_combine(KEYS, str_getcsv($line)); // map values to keys 

    header('content-type: application/json'); 
    echo json_encode($array); 
?> 
+0

Dank für Ihre Antwort danken, nachdem diese auf den Server hochladen, ich Fehler angezeigt 500. Nach der Fehlerprotokolle überprüft, bemerkte ich dieses 'mod_fcgid: stderr: PHP Parse error: syntax error, unerwartet '['. .. index.php on line 2' –

+0

Möglicherweise haben Sie eine ältere Version von PHP. Sie können versuchen, diese Zeile zu ersetzen: 'const KEYS = ['ID', 'Titel', 'Inhalt', 'Seite'];' mit: '$ keys = array ('ID', 'title', ' content ',' page '); ' und diese Zeile: ' $ array = array_combine (KEYS, str_getcsv ($ zeile)); ' mit diesem: ' $ array = array_combine ($ keys, str_getcsv ($ line)); ' – jpec

+0

das Problem ist, dass ich einige Male" falsch "bekomme. Ich habe versucht, 'randomLineNumber (rand (1, $ num);', aber immer noch bei der zufälligen Ausgabe von Json Ich bekomme falsch –

Verwandte Themen