Maison >développement back-end >tutoriel php >Brève analyse de l'algorithme d'ouverture de l'enveloppe rouge PHP
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!