2016-11-02 5 views
0

私は実際にUbuntuディストリビューションでPHPをコーディングしています。テキストコンテンツ(php)を取得する際の問題

テキストファイルを読み込み、コンボボックスフィールドに表示されるように行を抽出します。

私は、このようにそれをやろうとしている:(私はPHPで新たなんだ、穏やかな:D)

$file = fopen($fichier_txt.'.txt', 'r+'); 

if ($file) 
{ 
    $compteur_lignes = 0; 
    while (!feof($file) /*&& ($buffer = fgets($file, 4096) !== false)*/) 
    { 
     $lignes = fgets($file); 
     echo '<br>'; 
     echo $lignes; 
     $compteur_lignes++; 
    } 
    echo '<br>'; 
    $lignes = fgets($file); 
    echo '<select name="cbBox" size="1" id="Combobox">'; 
    $option = "<option value=\"Please select a Category\">Select an option</option> \n"; 
    for ($i = 0; $i < $compteur_lignes; $i++) 
    { 

     $option .= "<option "; 
     $option .= "value=\"$lignes[$i]\">$lignes[$i]</option> \n"; 
    } 
    echo $option; 
    echo '</select>'; 

fclose($file); 
} 

私はこれを行うと、私は私のローカルホストに私のテキストファイルの内容を取得します私の$ lignes [$ i]に値が含まれていない場合のように、私のcomboxoは空のフィールドを表示します...

私はちょっと助けてもらえますか?事前に

おかげで、

よろしく、

Stelio Kontos。

+0

あなたは 'file_get_contents'を点検したのに役立ちます願っていますか? – Aborted

+0

しかし、私は文字列ではなく配列としてテキストを取得したいので適切ではありませんでした。 –

答えて

0

$lignesは配列としてではなく文字列として入力されます。つまり、最後の行のみが常に含まれます。

ループの外にある$lignes = fgets($file)を削除する必要があります。私がしたい、少しofftopicです注意点として

$lines_count = count($lignes); 

:ところで

、変数$compteur_lignesは、関数countを使用して、いつでも$lignes配列のサイズを取得することができ、無用です変数をフランス語ではなく英語で指定することをおすすめします。 PHPの関数とキーワードは英語で書かれているので、英語で書くべきです。

+1

ああ、確かに!私はあなたが言ったように、それは働く:)。 私は$ compteur_lignesに関して、私はcount()で試しましたが、私が文字列で読んでいたので、私の数は常に1に等しくなりました... そして私は変数を英語で書いていますが、変数(いくつかのテストのため)、私はそれを順番に戻すことを忘れてしまった、私の悪い! とにかくありがとう、あなたは私の一日を作った! –

1

私はAntonieBの答えに同意しますが、コードを動作させるためにもう少し修正する必要があります。これを試してください:

$file = fopen($fichier_txt.'.txt', 'r+'); 

if ($file) 
{ 
    $lignes = array(); 
    while (!feof($file) /*&& ($buffer = fgets($file, 4096) !== false)*/) 
    { 
     $lignes[] = fgets($file); 
     echo '<br>'; 
     echo end($lignes); 
    } 
    $lignes_count = count($lignes); 
    echo '<select name="cbBox" size="1" id="Combobox">'; 
    $option = "<option value=\"Please select a Category\">Select an option</option> \n"; 
    for ($i = 0; $i < $lignes_count; $i++) 
    { 

     $option .= "<option "; 
     $option .= "value=\"$lignes[$i]\">$lignes[$i]</option> \n"; 
    } 
    echo $option; 
    echo '</select>'; 

fclose($file); 
} 

私はそれが

+0

私は以下のコードを使ってコードを修正しました:echo end($ lignes); echo $ lines [count($ lines) - 1];これは以下のようになります。私は同じ結果を得て、私は終わりの関数が私の配列の最後にカーソルを置くのを見ましたが、私は使用の必要性を理解していないのですか?それはうまく動作します、ありがとう:)。 –

+0

end()とcount()の両方がトリックです。 しかし、end($ lignes); count関数を使用し、最後に返されたインデックス($ lines [count($ lines) - 1];)に従って配列から要素にアクセスするよりも高速です。ファイルの行数が多い場合、コードの実行速度が向上します。小さなサイズのファイル(新しい行が少ない)の場合、違いに気付かないでしょう。 – Learner

+0

さて、精度のおかげで! –

関連する問題