更改电子表格公式以使其适用于 PHP

Posted

技术标签:

【中文标题】更改电子表格公式以使其适用于 PHP【英文标题】:Changing a spreadsheet formula so it works with PHP 【发布时间】:2009-12-26 23:17:03 【问题描述】:

多年来,我一直使用数学公式来确定留言板的相对活动水平。现在我想在 php 搜索引擎中使用该公式来替换不起作用的 Google Page Ranking 系统。

使用的数据项是:成员 (B2)、帖子 (D2)、主题 (C2) 和董事会创建日期 (E2)。在电子表格中,基本公式如下所示:

=SUM(((((((B2/E2)+(C2/E2)+(D2/E2)))*0.419)))+((((((B2/C2)+(B2/D2))/2)+(((C2/B2)+(D2/B2))/3)-3.4777)))/7)+0.0017

硬(非生成)数字是我手动计算的数字,以提供似乎提供的结果接近 Alexa 流量排名的结果,我每年都会修改它们。输出始终保留 4 位小数。

【问题讨论】:

【参考方案1】:

首先,您的方程式可以简化很多。现在,你有这个:

=SUM(
    (
        (
            (
                (
                    (
                        (B2/E2) + (C2/E2) + (D2/E2)
                    )
                )
                *
                0.419
            )
        )
    )
    +
    (
        (
            (
                (
                    ( (B2/C2) + (B2/D2) ) / 2
                )
                +
                (
                    ( (C2/B2) + (D2/B2) ) / 3
                )
                -
                3.4777
            )
        )
    )
    /
    7
)
+
0.0017

SUM 函数似乎没用,因为您只有不同的单元格,没有范围。此外,可以删除很多括号。因此,函数变为:

(
    (
        B2/E2 + C2/E2 + D2/E2
    )
    *
    0.419
    +
    (
        ( B2/C2 + B2/D2 ) / 2
        +
        ( C2/B2 + D2/B2 ) / 3
        -
        3.4777
    )
    /
    7
)
+
0.0017

把它写成一个衬里:

0.0017 + ((B2/E2 + C2/E2 + D2/E2) * 0.419 + ((B2/C2 + B2/D2) / 2 + (C2/B2 + D2/B2) / 3 - 3.4777) / 7)

要使其成为 PHP,请将单元格地址替换为变量:

0.0017 + (($members / $date + $topics / $date + $posts / $date) * 0.419 + (($members / $topics + $members / $posts) / 2 + ($topics / $members + $posts / $members) / 3 - 3.4777) / 7)

您可能希望从中创建一个函数,该函数将返回四舍五入的小数点后的结果:

function ranking($members, $posts, $topics, $date) 
    $ranking = 0.0017 + (($members / $date + $topics / $date + $posts / $date) * 0.419 + (($members / $topics + $members / $posts) / 2 + ($topics / $members + $posts / $members) / 3 - 3.4777) / 7);

    return round($ranking, 4);

您可以这样调用该函数(我不知道 E2 的日期是什么样的,因此是 30000):

$ranking = ranking(50, 60, 20, 30000);

希望对您有所帮助。

【讨论】:

哇!您不仅解决了我的问题,而且实际上还帮助我的电子表格变得更好。 E2 采用板的创建日期并衡量板的存在时间。该持续时间数字是公式其余部分中使用的数字。【参考方案2】:

如果没有关于实际电子表格的更多详细信息,很难想出一个可行的解决方案。不过,一般来说,您可能想要编写一个看起来像这样的函数:

function calculate_ranking($members, $posts, $topics, $creation_date) 
    return ((((((($members/$creation_date)+($topics/$creation_date)+($posts/$creation_date)))*0.419)))+(((((($members/$topics)+($members/$posts))/2)+((($topics/$members)+($posts/$members))/3)-3.4777)))/7)+0.0017;

如果您从电子表格中发布一些示例行,那么制定有效的解决方案会容易得多。我不确定我是否完全理解您对 sum 函数的调用做了什么,因此我将其从示例中删除。

【讨论】:

以上是关于更改电子表格公式以使其适用于 PHP的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel 中一次性使公式适用于整个列

在电子表格中如何锁定公式栏?

我们如何在电子表格公式中更改列值并保持行不变?

电子表格,如ui网格,适用于50000及以上的数据集

自动填充公式(跨电子表格运行) - Google 表格/应用程序脚本

更改 Google 表格布局的公式:转置和拆分