#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. о, кстати, это бесплатный сервис, я помогаю вам без оплаты. Будьте осторожны с восклицанием.