2017-03-23 27 views
0

私のコードで自分の変数が2つあります。 forループ内にあるif文があります。 if文がforループで実行されるとき、私の2つの変数はそれに応じて変わる必要がありますが、そうではありません。私はコード内に関数がないので、すべての変数はグローバルスコープにあります。ここでPHP - 変数は値を変更しないでください。

は私のコードです:

$file = file("../../manpages/structure.txt"); 
$topicindex = 0; 
$topiclineindex = 0; 
for($x = 0; count($file) > $x; $x++){ 
    $data = explode(",",$file[$x]); 
    $structure[$topicindex][$topiclineindex] = $file[$x]; 
    echo '[' . $topicindex . ',' . $topiclineindex . ']'; 
    $topiclineindex += 1; 
    if ($data[0] == "ENDTOPIC") { 
     echo "NEXT TOPIC"; 
     $topicindex += 1; 
     $topiclineindex = 0; 
    } 
} 
print_r($structure); 

これはブラウザに出力されます。

[0,0][0,1][0,2][0,3][0,4][0,5][0,6][0,7]NEXT TOPICArray ([0] => Array ([0] => TOPIC,Topic 1 [1] => SUBTOPIC,Sub Topic 1,intro.txt [2] => SUBTOPIC,Sub Topic 2,intro.txt [3] => ENDTOPIC [4] => TOPIC,Topic 2 [5] => SUBTOPIC,Sub Topic 21,intro.txt [6] => SUBTOPIC,Sub Topic 22,intro.txt [7] => ENDTOPIC))

そして、これはstructure.txt

TOPIC,Topic 1 
SUBTOPIC,Sub Topic 1,intro.txt 
SUBTOPIC,Sub Topic 2,intro.txt 
ENDTOPIC 
TOPIC,Topic 2 
SUBTOPIC,Sub Topic 21,intro.txt 
SUBTOPIC,Sub Topic 22,intro.txt 
ENDTOPIC 

任意の内容ですすべての提案は非常に高く評価されています。

編集:もう少しテストしましたが、新しく割り当てられた値がif文をエスケープしないようです。 forループの次の反復で、$topicindex$topiclineindexは、if文が実行される前の以前の反復の以前の値に戻りました。

答えて

1

IF文は、最初のENDTOPICが実際には "ENDTOPIC \ n"なので、最後の行のみ実行されます。 新しいラインフラグ

+0

は、あなたが正しいですので あなたのIF文は、最後の行だけのために実行されます。私は改行文字を忘れていました。どうもありがとうございます。 –

0

の詳細については、http://php.net/manual/en/function.file.phpこれはトリックを行います

if (trim($data[0]) == "ENDTOPIC") { 

if ($data[0] == "ENDTOPIC") { 

を交換してください。最初ENDTOPICが実際に「ENDTOPIC \ n」は

トリム()関数ストリップ「\ n」は

関連する問題