2016-11-08 1 views
0

Ich habe etwas Code geschrieben, um Daten aus einer Textdatei einzulesen.
Die Daten wie folgt aussehen:php Daten von Textdatei zu mehrdimensionalen Array funktioniert nicht, aber keine Konsolenfehler

11: 12: 12: Test titel 1
12: 13: 13: Test titel 2
13: 14: 14: Test titel 3

der folgende Code liest das Datum ein, teilt es für jede Zeile mit einer Zeichenfolge auf, die in einem Array liegen. Das funktioniert perfekt. Danach sollte es jede Zeile wieder in einer Zeichenfolge, die in einem Array gehen, und alle diese Arrays in einem mehrdimensionalen Array teilen. Dieser letzte Teil funktioniert nicht ... Ich denke, es ist seltsam, dass anstelle von Fehlern, von der Hälfte der Seite, zeigt es nur eine leere Seite ... auch habe ich versucht, einige der Code in Kommentar und so Ich habe es etwas eingegrenzt. Ich gebe euch den kommentierten Code, aber alle Kommentare sollten weggehen, und es sollte so funktionieren! danke!

<?php 
 
$filename = "data.txt"; 
 
$fp = fopen($filename, "r"); 
 
$content = fread($fp, filesize($filename)); 
 
$lines = explode("\n", $content); 
 
$parts = null; 
 
fclose($fp); 
 
print_r($lines); 
 
echo sizeof($lines); 
 
for ($i=0; $i < sizeof($lines)-1 ; $i++) { //the minus 1 corrects the empty line automatically added when saving the data.txt file 
 
    //$tempParts[] = explode(":", $lines[i]); 
 
    //array_push($parts, $tempParts); 
 
} 
 
//echo "<br/>" 
 
echo "all parts: " 
 
//for ($row=0; $row < sizeof($lines)-1; $row++) { 
 
// for ($col=0; $col < sizeof($parts[$row]); $col++) { 
 
//echo $parts[$row][$col]; 
 
// } 
 
//} 
 
?>

Antwort

0

Ich denke, preg_split wird tun, was Sie wollen.

$filename = "data.txt"; 
$fp = fopen($filename, "r"); 
$content = fread($fp, filesize($filename)); 

//$content = "11:12:12:test titel 1 
      12:13:13:test titel 2 
      13:14:14:test titel 3"; 

$arr = preg_split("/(:|\n)/" ,$content); 


var_dump($arr); 

Siehe hier: http://www.phpliveregex.com/p/hNH
Klicken Sie auf preg_split auf der rechten Seite des Bildschirms es

zu machen arbeiten Vielleicht funktioniert besser für Sie?

preg_match_all("/(\d+):(\d+):(\d+):(.*)/", $content, $arr); 

Click preg_match_all:
http://www.phpliveregex.com/p/hNW

+0

So kann ich ein eindimensionales Array, aber es sollte so funktionieren! Vielen Dank! Schöne Webseite übrigens! –

+0

@ pieter-jangoeman Ich habe meine Antwort stattdessen mit preg_match_all aktualisiert. – Andreas

+0

hmm, wie ist das besser? –

0

Ich bin nicht sicher, genau zu verstehen, was Sie wollen, aber Sie können versuchen, diese:

if (!$fp = fopen("data.txt","r")) { 
    die("fail to open"); 
}else { 
    $all = array(); 
    $row = 1; 
    while(!feof($fp)) { // foreach line 
     $ligne = fgets($fp,255); // get line content 
     $cols = explode(':', $line); // gets cols 
     $all[$row++] = $cols; // put cols on current row 
    }  
    var_dump($all); // dump all data stored by row 
    fclose($fp); 
} 
Verwandte Themen