2012-04-03 5 views
1

Ich habe ein Array in PHP, das alle Zeilen einer Textdatei enthält (jede Zeile ist ein Wert des Arrays). Meine Textdatei hatte leere Zeilen, daher hat das Array auch leere Zeilen. Ich wollte das Array für einen bestimmten Wert wie folgt zu:PHP und Javascript-Array - leere Werte überspringen und neue Array hinzufügen?

$array = array(); 

     $lines = file("textfile.txt"); //file in to an array 
     foreach ($lines as $line) 
     { 
      if (stripos($line, "$$") !== false) 
      { 
       $array[] = str_replace("$$", "", $line); 

      } 
     } 

Der obige Code ist für einen $$ suchen und es mit einem leeren zu ersetzen. Die Textdatei enthält eine Zeile mit einer Zahl von $ 1 oder einer beliebigen Zahl, und ich möchte, dass sie alle Instanzen dieser Zeile findet, was sie tut.

Mein Problem ist, dass ich möchte, dass es die nächsten 5 Zeilen findet, die nicht leer sind, nachdem die $$ (Zahl) gefunden und in ein multidimensionales Array gelegt wurde. Die mehrdimensionale Array sucht ähnlich wie diese (das Programm ist ein Test, falls Sie sich fragen, warum das Array die Art und Weise gestattet es ist):

$test = array(
    array('question' => 'What is the answer', 'ansa' => "answera", 'ansb' => "answerb", 'ansc' => "answerc", 'ansd' => "answerd"), // $test[1] 
    array('question' => 'What is the answer', 'ansa' => "answera", 'ansb' => "answerb", 'ansc' => "answerc", 'ansd' => "answerd"), // $test[2] 
); 

Die nächsten fünf Zeilen nach der $$ (Zahl) sind eine Frage und vier Antworten, die in das Array gehen müssen. Mein Code mit regxp und Suche funktioniert nicht, also habe ich ihn verworfen.

Antwort

1

Sie können so etwas wie dieses versuchen ...

<?php 

$lines = array_filter(file('text.txt')); //file in to an array 
$questions = array(); 

// find your starts and pull out questions 
foreach ($lines as $k=>$line) 
{ 
    if (stripos($line, "$$") !== false) 
    { 
     $questions[] = array_slice($lines, $k, 5); 
    } 
} 


// dump 
var_dump($questions); 

Siehe php manual for array_slice

+0

Dies würde nicht für leere Zeilen überprüfen, die einfach hinzugefügt werden können. Sie können es auch durch eine 'for'-Schleife ersetzen, damit Sie die nächsten Dateizeilen überspringen können, damit sie nicht unnötigerweise durchgeschleift werden. –

+0

leere Zeilen mit '$ lines = array_filter (Datei ('text.txt'));' ... Hosh, Sie haben Recht, aber das ist nur ein Beispiel. – Alex

+0

Ja, die wichtigste Zeile, über die ich verwirrt war. Ich danke dir sehr! –

0

Haben Sie sich preg_replace_callback?

Etwas in dieser Richtung sollte funktionieren:

<?php 

function replace_callback($matches) { 
    var_dump($matches); 
} 

preg_replace_callback('/\$\$[0-9]+\s+([^'.PHP_EOL.']+){5}/is', 'replace_callback', file_get_contents('textfile.txt')); 

?> 
Verwandte Themen