Формат текстового файла:
1)вопрос 1
&
autofocus
multiple
autocomplete
placeholder
*required
&
2)вопрос 2
&
:first
:first-line
:after
*:before
:first-child
&
Результат
$test = array(
$quest1 = array('ans1' => 'autofocus', 'ans2' => 'multiple', 'ans3' => 'multiple', 'ans4' => 'multiple', 'ans5' => '*required'),
$auest2 = array('ans1' => ':first', 'ans2' => ':first-line', 'ans3' => ':after', 'ans4' => '*:before', 'ans5' => ':first-child')
);
Или можно ли как то по другому преобразовать в ассоциативный массив?
<?php
$handle = fopen("sem.txt", "r");
while (!feof($handle)) {
$buffer[] = fgets($handle, 4096);
}
fclose($handle);
print_r(array_chunk($buffer, 9, true));
?>
Правильно заданный вопрос, говорят, содержит половину ответа. Было бы куда проще и понятнее, если бы вы определили ФОРМАЛЬНЫЕ правила, по которым строится входной файл и как он должен разойтись в выходной.
Допустим такие:
И так далее. Определив формальные правила очень легко составить программу, которая по ним разберёт файл. Например так:
<?php
$f = fopen('q.txt', 'r') or die('Не могу открыть файл');
$quiz = array();
while (!feof($f)) { // Пока не дойдём до конца файла
$s = trim(fgets($f));
if (!empty($s)) { // Если попалась непустая строка - это наш вопрос
$question = $s;
if (trim(fgets($f)) != '&')
throw new Exception('После вопроса должна быть строка с символом &');
$answers = array(); // Массив вариантов ответа
$right_answer = false; // Правильный вариант ответа
for(;;) {
$s = trim(fgets($f));
if (empty($s))
throw new Exception('В конце списка ответов должна быть строка с символом &');
if ($s == '&')
break; // Завершаем начитывание ответов, когда найдём &
$id = 'ans' . (count($answers) + 1); // Ключ элемента с ответом
if (substr($s, 0, 1) == '*') { // Если первый символ - звёздочка
if ($right_answer !== false) // Если уже был один правильный ответ
throw new Exception('Допускается только один правильный вариант ответа');
$right_answer = $id; // Запомним ключ правильного варианта
$s = substr($s, 1); // Отрежим звёздочку от текста ответа
}
$answers[$id] = $s; // Запишем ответ в массив
}
if ($right_answer === false) // Если правильный ответ не задан среди вариантов
throw new Exception('Ни один из вариантов ответа не указан как правильный');
// Добавляем информацию по вопросу в результирующий массив
$quiz[] = array(
'question' => $question,
'answers' => $answers,
'right_answer' => $right_answer
);
}
}
fclose($f); // Закрываем файл
print_r($quiz);
где q.txt
- текстовый файл с примером из вопроса.
Вывод будет выглядеть так:
Array
(
[0] => Array
(
[question] => 1)вопрос 1
[answers] => Array
(
[ans1] => autofocus
[ans2] => multiple
[ans3] => autocomplete
[ans4] => placeholder
[ans5] => required
)
[right_answer] => ans5
)
[1] => Array
(
[question] => 2)вопрос 2
[answers] => Array
(
[ans1] => :first
[ans2] => :first-line
[ans3] => :after
[ans4] => :before
[ans5] => :first-child
)
[right_answer] => ans4
)
)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Господа и дамы! Как вывести пользователя у кого больше выполненных заданийТаблица users и таблица quests_active (сюда записываются id заданий и id пользователей)...
Слегка отредактировал стандартный модуль OcStore 23 под себя, модуль вроде бы работает, всё считает, но выдаёт такую ошибку:
Как безопасно передать содержимое переменной php в переменную js при условии, что фильтрацию и экранирование символов выполнить невозможно?