【问题标题】:How do you create a dependency structure in php?如何在 php 中创建依赖结构?
【发布时间】:2013-07-11 18:06:08
【问题描述】:

我有很多状态,我正在为每个状态构建函数。我试图弄清楚如何根据状态恢复更改。再清楚一点: 假设您有 5 个状态: 开始 已安装 程序 完全的 已上传

为了从状态 COMPLETE 变为 UPLOADED,我必须运行 PROC status 和 INSTALLED。我正在尝试构建一个简单的系统,我可以在其中调用一个函数,它会根据它们在数组或其他东西中定义的依赖关系知道要运行哪些函数。

假设: 每个状态只能向后恢复。所以如果在上面的例子中,UPLOADED 不能进入 COMPLETE 状态。 每个状态都可以恢复为自身(状态已上传并恢复为已上传)。

有人知道我该怎么做吗?当然会有更多的状态,我只是想避免 50 个 if 语句:/

【问题讨论】:

  • SPLLinkedList 提供了在列表中获取下一个或上一个的简单选项
  • @MarkBaker 你能详细说明一下吗?以前从未使用过 SPL。

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


【解决方案1】:

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

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

call_user_func($nodeValue, ...);

【讨论】:

    【解决方案2】:

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

    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)

    因此,向前和向后移动工作只是检查下一点的问题……有很多方法可以剥那只猫的皮。然后,您将获得一种将函数与位相关联的简单方法、一种存储状态的紧凑方法以及大量数学运算来帮助您评估所需的步骤。

    【讨论】:

    • 我不明白这个解决方案。
    • 如果您有兴趣,我可以尝试详细说明! :)
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2016-01-16
    • 2014-10-18
    相关资源
    最近更新 更多