你如何在PHP中创建依赖结构?

时间:2013-07-11 18:06:09

标签: php arrays sorting data-structures data-processing

我有很多状态,我正在为每个状态构建功能。我试图找出如何根据状态恢复更改。更明确一点: 假设你有5个状态: 开始 INSTALLED PROC 完成 UPLOADED

为了从状态COMPLETE转到UPLOADED,我必须运行PROC状态并安装。我正在尝试构建一个简单的系统,我可以在其中调用一个函数,它将知道运行哪些函数,具体取决于它们在数组中定义的依赖关系。

假设: 每个状态只能向后还原。因此,如果在上面的示例中,UPLOADED无法进入COMPLETE状态。 每个状态都可以恢复为自身状态(Status UPLOADED并恢复为UPLOADED)。

任何人都知道我怎么能这样做?当然会有更多的状态,我只是想避免50个if语句:/

2 个答案:

答案 0 :(得分:0)

使用您可能的状态路径创建DAG(定向非循环图)。然后,您可以使用提供的起点遍历图形,并根据您正在访问的节点的值调用函数。

因此,如果您的节点具有值complete,我假设您要调用complete(...)函数。所以你可以这样做:

call_user_func($nodeValue, ...);

答案 1 :(得分:0)

我将它包装成一个简单的旧整数。想一想:

class Foo {
    const START     = 1; // 2^0
    const INSTALLED = 2; // 2^1
    const PROC      = 4; // 2^2
    const COMPLETE  = 8; // 2^3
    const UPLOADED  = 16;// 2^4

    // all powers of 2
}

如果你在数据库中备份你的任务,它也会非常优雅,一个整数可以包含整个状态。您还可以使用位掩码快速查询具有给定状态的所有作业。

我离题了。如果你想到PROC的工作,它看起来像这样:

00111

(实际上是7)

因此,将工作向前推进并回滚,只是一个问题,即检查下一点...大量的方法来修皮猫。你得到的是一种简单的方法,可以将功能与位相关联,一种紧凑的存储状态方法,以及大量的数学运算来帮助您评估所需的步骤。