2012-04-03 6 views
1

私は、テキストファイルのすべての行を含む配列をphpに持っています(各行は配列の1つの値です)。私のテキストファイルには空白行があるので、配列にも空白行があります。私はこのような特定の値の配列を検索したかったのです:phpとjavascript配列 - 空白の値をスキップし、新しい配列に追加しますか?

$array = array(); 

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

      } 
     } 

上記のコードは、$$を探して空白に置き換えています。テキストファイルは$$ 1または任意の数の行を保持しており、その行のすべてのインスタンスを検索したいと考えています。

私の問題は、$$(数値)を見つけて空白でない次の5行を見つけて、多次元配列に入れることです。

$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] 
); 

は$$(番号)の後に次の5行は質問です:これに似て探して多次元配列(プログラムは、あなたが思っている場合のテスト配列が道を命名されている理由、それはです)配列に入る必要がある4つの答えがあります。私のコードregxpと検索は機能していないので、私はそれを破棄しました。

答えて

1

あなたはこのような何かを試すことができます...

<?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); 

php manual for array_slice

+0

は、これは単純に加算することができ、空行をチェックしません。また、 'for'ループで置き換えて、次のファイル行をスキップして不必要にループしないようにすることもできます。 –

+0

'$ lines = array_filter(file( 'text.txt'));で空の行を削除します;' ... Hosh、あなたは正しいですが、これは単なる例です。 – Alex

+0

はい、私が混乱していた最も重要な行です。どうもありがとうございます! –

0

はあなたがpreg_replace_callback見てきましたか?これらの線に沿って

何か動作するはずです:

<?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')); 

?> 
関連する問題