PHP条件问题数据结构

时间:2013-09-27 17:24:56

标签: php mysql algorithm tree

我正在为非营利组织工作一个webapp,我想知道用于获得以下效果的最佳数据结构是什么:

该应用程序将包括从用户获取信息,类似于游戏21个问题,但超过是或否,例如我可以向用户询问3个问题。根据这些答案,会有另一组X问题。这组问题将根据前3的答案而有所不同。

这将一直持续到应用程序找到答案为止。

可能是一棵树上有许多树枝的东西。

虽然我在PHP和MySQL方面的经验有限,但我希望能够想到一个结构足够灵活,可以拥有树的许多分支,并且理想情况下可以存储在数据库或其他地方。 。

非常感谢任何帮助或想法。

2 个答案:

答案 0 :(得分:0)

在数据库中存储树数据的常用方法是添加标识左右邻居和父对象的列。 CakePHP框架提供了一种使用Tree Behavior轻松操作树中组织的数据的方法。即使您不想使用CakePHP,也可以阅读文档以了解它们是如何实现的。

答案 1 :(得分:0)

我们通常希望在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)

应用程序的其余部分只需要您运行查询来提取问题,跟踪用户数据(获取/发布/会话/ mysql whathaveyou)并将结果保存到数据库中,如果这是您想要的做。在回答每一集后,AJAX可能会非常乐意接下来的问题。