Skip to content

Instantly share code, notes, and snippets.

@donyahmd
Created September 1, 2024 05:21
Show Gist options
  • Select an option

  • Save donyahmd/81fd7161b91977aa914e5dffb3f156a5 to your computer and use it in GitHub Desktop.

Select an option

Save donyahmd/81fd7161b91977aa914e5dffb3f156a5 to your computer and use it in GitHub Desktop.
Referral System in PHP
<?php
class ReferralSystem
{
private $referrals = [];
private $referralBonus;
private $maxLevels;
public function __construct($maxLevels = 3, $referralBonus = 10)
{
$this->maxLevels = $maxLevels;
$this->referralBonus = $referralBonus;
}
public function addReferral($referrer, $referred)
{
if (!isset($this->referrals[$referrer])) {
$this->referrals[$referrer] = [];
}
$this->referrals[$referrer][] = $referred;
}
public function getReferrals($user)
{
return isset($this->referrals[$user]) ? $this->referrals[$user] : [];
}
public function calculateBonus($user)
{
$totalBonus = 0;
$this->calculateBonusRecursive($user, 1, $totalBonus);
return $totalBonus;
}
private function calculateBonusRecursive($user, $currentLevel, &$totalBonus)
{
if ($currentLevel > $this->maxLevels || !isset($this->referrals[$user])) {
return;
}
foreach ($this->referrals[$user] as $referral) {
$totalBonus += $this->referralBonus / $currentLevel;
$this->calculateBonusRecursive($referral, $currentLevel + 1, $totalBonus);
}
}
}
$referralSystem = new ReferralSystem(3, 30); // 3 levels, $30 bonus
// Adding referrals
$referralSystem->addReferral('User1', 'User2');
$referralSystem->addReferral('User2', 'User3');
$referralSystem->addReferral('User3', 'User4');
$referralSystem->addReferral('User1', 'User5');
// Calculating bonuses
echo "User1 Bonus: " . $referralSystem->calculateBonus('User1') . "\n"; // Should calculate bonuses across multiple levels
echo "User2 Bonus: " . $referralSystem->calculateBonus('User2') . "\n"; // Should calculate bonus for User2's referrals
echo "User3 Bonus: " . $referralSystem->calculateBonus('User3') . "\n"; // Only direct referral bonuses
print_r($referralSystem->getReferrals('User1'));
print_r($referralSystem->getReferrals('User2'));
print_r($referralSystem->getReferrals('User3'));
print_r($referralSystem->getReferrals('User4'));
print_r($referralSystem->getReferrals('User5'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment