Как объединить 3 файла в одну таблицу?

#php #mysql #text-files

#php #mysql #текстовые файлы

Вопрос:

У меня есть тестовый скрипт, который генерирует текстовый файл с ответами. И иметь 2 текстовых файла с правильными ответами. Я хочу: 1) Объединить все файлы в одну таблицу, например:

 <table>
<tr>
<td>№ of question</td>
<td>data from file 1</td>
<td>data from file 2</td>
<td>data from file 3</td>
</tr>
...
</table>
 

2) Я хочу заменить идентификатор в этих файлах на текст из БД (MySQL). У меня есть таблица с вопросом и ответами с похожим идентификатором (как в текстовых файлах).

Все файлы имеют структуру, подобную:

 1|3
2|4
3|1
 

где первое число — это идентификатор вопроса, а второе — вариант ответа.

Я начинаю кодировать, но не знаю, как включить данные из файлов:

 // Slect from DB
$qsel=mysql_query("SELECT `qid`, `qtext` from `questions` ORDER BY `qid`");

// Open file 1 
$key1=fopen("data/test_1_key1.txt", "r");
$k1=explode("/r/n", $key1);

// Open file 2 
$key2=fopen("data/test_1_key2.txt", "r");
$k2=explode("/r/n", $key2);

$rtable='<table border="1" cellspacing="0" cellpadding="3">
    <tr>
      <th width="40%">Q</th>
      <th width="20%">A 1</th>
      <th width="20%">A 2</th>
      <th width="20%">NAME</th>
    </tr>';
  while($q=mysql_fetch_row($qsel))
  {

    $rtable.='<tr><td><b>'.$q['1'].'</b></td>'; 
    $rtable.='<td>data from file 1</td>'; 
    $rtable.='<td>data from file 2</td>'; 
    $rtable.='<td></td>'; 
  }
  echo '</table>'.$rtable;
 

Комментарии:

1. Что вы уже сделали? Упорядочены ли строки в файлах? Есть ли какой-нибудь недостающий?

2. Да, все файлы сортируются по первому идентификатору. Без пропусков. Я не знаю, как начать генерировать таблицу с td из 3x файлов…

3. Пожалуйста, помогите мне! Я обновляю сообщение!

Ответ №1:

Сначала я бы извлек текстовые файлы и преобразовал их в индексированный массив:

 $tmp1 = file('text1.txt');
$data1 = array();
foeach($tmp1 as $line)
{
    list($key1, $val1) = explode("|", $line);
    $data1[$key1] = $val1;
}
 

а затем, в цикле выборки mysql, просто используйте индексированный массив:

 while($q=mysql_fetch_row($qsel))
{

    $rtable.='<tr><td><b>'.$q['1'].'</b></td>'; 
    $rtable.='<td>' . ( isset( $data1[ $q['0'] ] ) ? $data1[ $q['0'] ] : '' ) . '</td>'; 
    $rtable.='<td>data from file 2</td>'; 
    $rtable.='<td></td>'; 
}
 

Комментарии:

1. извините, в этой строке есть небольшая ошибка $data1 = array(); . Кроме того, ничего не отображается, отображается только заголовок таблицы без данных или вообще не выводится?

2. Я догадался о массиве, но не работает (таблица показывает без <td></td> того, что мы хотим показать.

3. Проблема с $data1[ $q['qid'] ] тем, почему мы выводим строку? Нужна строка из файла!

4. вам нужна строка из файла, но какая строка? Если вы посмотрите достаточно внимательно, $data1 это индексированный массив с индексом, взятым из первого раздела строки файла (идентификатор, как вы отметили выше). Чтобы получить правильные данные, вам нужно знать, какой идентификатор я ищу прямо сейчас, следовательно $data1[ $q['qid'] ] .

5. о, кстати, это бесплатный сервис, я помогаю вам без оплаты. Будьте осторожны с восклицанием.