Maison >développement back-end >tutoriel php >Brève analyse de l'algorithme d'ouverture de l'enveloppe rouge PHP

Brève analyse de l'algorithme d'ouverture de l'enveloppe rouge PHP

藏色散人
藏色散人avant
2021-06-09 15:02:024664parcourir

Cet article vous donnera une brève analyse de l'algorithme d'ouverture de l'enveloppe rouge PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Algorithme de fractionnement de paquets rouges PHP

Le code est le suivant :

/**
     * 拆分红包
     * @param SendRedPackageRequest $request
     * @return array
     */
    protected function spitMoney(SendRedPackageRequest $request)
    {
        $result = [];
        $reamingMoney = $request->money;
        for ($i = $request->count; $i >= 1; $i--) {
            if ($i === 1) {
                $result[] = round($reamingMoney, 2);
                $reamingMoney = 0;
            } else {
                $average = round(bcdiv($reamingMoney, $i), 2);    //平均值
                $amount = round(mt_rand(1, $average * 199) / 100, 2);
                $reamingMoney = doubleval(bcsub($reamingMoney, $amount));
                $result[] = round($amount, 2);
            }
        }
        return $result;
    }

La logique est relativement simple, saisissez le montant et le nombre de fractionnements

Parcourez d'abord la quantité à diviser, et si c'est la dernière, mettez-y tout l'argent restant

Sinon, prenez le montant restant (le montant restant dans le premier cycle = montant total) divisé par les temps restants pour obtenir la moyenne, puis choisissez au hasard le plus petit 0,01 et la moyenne * 2, et mettez simplement à jour le montant restant.

L'algorithme simule l'algorithme de fractionnement de l'enveloppe rouge WeChat, mais celui-ci est calculé et enregistré à l'avance, et WeChat le calcule dynamiquement à chaque fois.

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer