-1

何年もの間、私は数式を使ってメッセージ ボードの相対的な活動レベルを決定してきました。今、私はその数式を php 検索エンジンで使用して、機能していない Google ページ ランキング システムを置き換えたいと考えています。

使用されるデータ項目は、メンバー (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 桁まで保持されます。

4

2 に答える 2

4

まず第一に、方程式はかなり単純化できます。これで、次のようになります。

=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)

おそらく、小数点以下 4 桁で丸められた結果を返す関数を作成する必要があります。

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);

それが役立つことを願っています。

于 2009-12-26T23:45:43.393 に答える
0

実際のスプレッドシートについてもう少し詳しく説明しないと、実用的なソリューションを考え出すのは非常に困難です。一般的には、次のような関数を書きたいと思うでしょう:

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 関数への呼び出しが何をしたかを完全に理解しているかどうかわからないので、例から削除しました。

于 2009-12-26T23:36:14.763 に答える