2016-11-02 3 views
0

Я действительно работаю над распространением Ubuntu, кодированием php.Проблема при получении текстового содержимого (php)

Я хочу прочитать текстовый файл и извлечь строки так, чтобы они отображались в поле combobox.

Я пытаюсь сделать это следующим образом: (Я новичок в 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); 
} 

Как я это делаю, я получаю содержание моего текстового файла в моем локальном хосте но мой comboxo показывает пустые поля, например, если мои $ lignes [$ i] не содержат никакого значения ...

Не могли бы вы немного помочь мне :)?

Спасибо заранее,

С уважением,

Stelio Kontos.

+0

Вы проверили 'file_get_contents'? – Aborted

+0

Да, но это было неуместно, так как я хотел получить текст как массив, а не строку. –

ответ

0

Вы не заполняете $lignes как массив, а как строку, что означает, что он всегда содержит только последнюю строку. Вы должны делать это:

$lignes = array(); 
while (!feof($file)) 
{ 
    $lignes[] = fgets($file); 
    echo '<br>'; 
    echo $lignes[count($lignes) - 1]; 
    $compteur_lignes++; 
} 

И вы должны удалить $lignes = fgets($file), что находится за пределами вашего цикла.

Кстати, переменная $compteur_lignes бесполезно, вы можете получить размер $lignes массива в любое время с помощью функции count:

$lines_count = 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

конец() и счет() оба делает трюк. Но конец ($ lignes); быстрее, чем использование функции count, а затем доступ к элементу из массива по возвращенному последнему индексу ($ lines [count ($ lines) - 1];). Ваш код будет выполняться быстрее, если ваш файл имеет много строк. Для файлов небольшого размера (с менее новыми строками) вы даже не заметите разницы. – Learner

+0

Хорошо, спасибо за точность! –

Смежные вопросы