Intereting Posts
При вставке объекта с ассоциациями существует ли способ использовать FK вместо получения объекта? Почему dns_get_record не показывает CNAME, когда я ЗНАЮ, что они существуют? Установить языковой стандарт в Symfony 2.1 PHP. Является ли htmlentities () достаточным для создания xml-безопасных значений? как отправить тип входного файла через javascript в модулях joomla Синхронизация строк в PHP datetime Конвертер формата HTML в PDF, который решает CSS-шрифт @ font-face? php $ _SERVER , чтобы включить строку запроса Отправка многостраничного POST из iOS и чтение параметров в PHP $ _POST? Как получить данные из базы данных mysql Отправка строкой, закодированной в mcrypt, с помощью параметра URL – декодированный текст искажается Должны ли зависимости автоматически удаляться с диска после установки / обновления с помощью Composer? Запрос CURL PHP AJAX предотвратить прямой доступ к URL-адресу в php-файл Как заменить функции MySQL PDO?

Структура данных Условных Вопросов PHP

Я работаю с webapp для некоммерческой организации, и мне было интересно, какая будет лучшая структура данных, используемая для получения следующего эффекта:

Приложение будет состоять из получения информации от пользователя, похожего на вопросы игры 21, но с более чем Да или Нет, например, я мог бы задать пользователю 3 вопроса. На основе этих ответов будет еще один набор X вопросов. Этот набор вопросов будет отличаться в зависимости от ответов первых 3.

Это будет продолжаться до тех пор, пока приложение не выяснит ответ.

Возможно, что-то вроде дерева с множеством ветвей.

Хотя у меня ограниченный опыт работы с PHP и MySQL, я бы хотел подумать о структуре, которая была бы достаточно гибкой, чтобы иметь много ветвей дерева и многие уровни, которые идеально могут быть сохранены в базе данных или где-то еще.

Любая помощь или идеи будут высоко оценены.

Обычно нам нравится видеть примеры и сообщения об ошибках на этой стороне SE, но было бы довольно удобно хранить все эти вопросы в базе данных MySQL. Алгоритм будет отличаться в зависимости от того, как вы хотите, чтобы вопросы менялись.

Вы можете организовать его так, чтобы каждый вопрос на экране имел свой собственный маршрут, используя ID для управления маршрутом:

  • Вопрос 1 (id 10) | Ответ 1 (+10) | Ответ 2 (+20) | Ответ 3 (+30)
  • Вопрос 2 (id 11) | Ответ 1 (+20) | Ответ 2 (+10) | Ответ 3 (+30)
  • Вопрос 3 (id 12) | Ответ 1 (+20) | Ответ 2 (+30) | Ответ 3 (+10)

И если мы скажем, что пользователь выбирает 2 | 3 | 1:

  • Вопрос 4 (id 30)
  • Вопрос 5 (id 41)
  • Вопрос 6 (id 32)

Поскольку первая цифра отличается, и мы увеличиваем только на 10, вы не столкнетесь с какими-либо дублирующимися вопросами за каждый прогон.

Другой способ заключается в явном определении следующих наборов вопросов:

  • Вопрос 1 (id 1) | Ответ 1 (5) | Ответ 2 (12) | Ответ 3 (9)
  • Вопрос 2 (id 2) | Ответ 1 (7) | Ответ 2 (16) | Ответ 3 (18)
  • Вопрос 3 (id 3) | Ответ 1 (4) | Ответ 2 (10) | Ответ 3 (24)

И снова пользователь выбирает 2 | 3 | 1:

  • Вопрос 4 (id 12)
  • Вопрос 5 (id 18)
  • Вопрос 6 (id 4)

Остальная часть приложения просто потребует от вас выполнить запрос, чтобы вытащить вопросы, отслеживать данные пользователя (get / post / session / mysql whathaveyou) и сохранить результаты в db, если это то, что вы хотели сделать. AJAX, вероятно, будет довольно милым, чтобы ответить на следующие вопросы после ответа на каждый набор.

Общим способом хранения древовидных данных в базе данных является добавление столбцов, идентифицирующих левого и правого соседа и родителя. CakePHP Framework предлагает способ легко манипулировать данными, организованными в дереве, используя Tree Behavior . Даже если вы не хотите использовать CakePHP, вы можете прочитать документацию, чтобы узнать, как они ее реализуют.