Bir tablo formül değişiyor bu yüzden PHP ile çalışır

2 Cevap php

yıllardır ben, mesaj panoları için göreli aktivite düzeylerini belirlemek için bir matematik formülü kullandık. Şimdi çalışmayan Google Page Ranking sistemi değiştirmek için bir php arama motoru bu formülü kullanmak istiyorum.

Kullanılan veri öğeleri şunlardır: Üyeler (B2), Mesajlar (D2), Konular (C2) ve Kurulları oluşturma tarih (E2). Elektronik tabloda baz formül şöyle:

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

Sert (non-oluşturulan) sayılar sayılar Alexa Traffic sıralaması ne olacağını yakın sonuçlar sağlamak gibi görünüyor ve ben her yıl bunları değiştirmek çıkışı sağlamak için elle hesaplanmış bulunmaktadır. Çıkış her zaman 4 ondalık basamağa kadar tutulur.

2 Cevap

Her şeyden önce, sizin denklemi oldukça basitleştirilmiş olabilir. Şimdi, bu var:

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

TOPLA işlevi yalnızca ayrı hücreleri değil, aralıkları gibi, işe yaramaz görünüyor. Ayrıca, parantez bir çok kaldırılabilir. Böylece, işlevi bu olur:

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

Bir tek astar olarak yazılı:

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

PHP yapmak için, değişkenler ile hücre adresleri yerine:

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

Muhtemelen 4 ondalık basamağa yuvarlanmış sonucu dönecektir o dışarı bir işlevi yapmak istiyorum:

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

Ve sen (ben tarih E2 böylece 30.000, neye benzediğini hiç bir fikrim yok) böyle bu işlevi diyebiliriz:

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

Umut olur.

Gerçek çizelgesindeki hakkında biraz daha ayrıntı olmadan, bir çalışma çözüm ile gelip çok çok zor. Ama genel olarak, muhtemelen böyle bir şey görünen bir işlevi yazmak isterdim:

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

Eğer tablonuzda bazı örnek satırları yayınlamak eğer çalışan bir çözüm zanaat çok daha kolay olacaktır. Ben tam toplamı işlevine çağrı yaptığını anlamak emin değilim, bu yüzden benim örnek kaldırıldı.