Jump to content

Ladder/league system coding


leeandrew

Recommended Posts

I have made a rating script like hot or not. The top images are displayed in a toplist; i can have multiple toplists for different categories of pictures.

 

I'm trying to find a way to have one big league system instead of different toplists for different categories.

 

Example:

I'd like to set up 3 leagues. People rate the pictures and each week the top 3 pictures from league 3 move into league 2, while the bottom 3 pictures from league 2 are demoted to league 3 and so on. Each week the votes are reset and voting continues as usual for another week etc.

 

I'm having trouble thinking where to start coding. Any suggestions of scripts that do similar jobs?

Link to comment
Share on other sites

Below is one way of promoting/demoting. Of course you'll need a way to allocate scores and preserving the results while scores are collected for the next week.

 

You may want to lookup the functions used

 

www.php.net/arsort

www.php.net/array_slice

www.php.net/array_merge

 

 

<?php 
/**
* code to create 3 leagues of 
* 8 members with random scores
* and save me typing in data
*/
        $member = 'A';
        $ladder = array();

        for ($i=0; $i < 24; $i++)
        {
            $league = $i%3;
            $score = rand(1,50);
            $ladder[$league][$member] = $score;
            $member++;
        }
/**
* sort each league by rating desc
*/
        for ($leag=0; $leag<3; $leag++)
        {
            arsort ($ladder[$leag]);
        }
/**
* show ladder
*/
        echo '<pre>', print_r($ladder, true), '</pre>';
/**
* now promote/demote teams
*/
        promote ($ladder, 0, 1);             // leagues 0 and 1
        promote ($ladder, 1, 2);             // leagues 1 and 2
/**
* show new ladder
*/
        echo '<pre>', print_r($ladder, true), '</pre>';
        
/**
* function to promote/demote between two leagues
*/
function promote (&$ladder, $a, $b)
{
    $ka = count($ladder[$a]);
    
    $topa = array_slice ($ladder[$a], 0, $ka-3);
    $bota = array_slice ($ladder[$a], $ka-3);         // lower 3 from league a
    
    $topb = array_slice ($ladder[$b], 0, 3);          // top 3 from league b
    $botb = array_slice ($ladder[$b], 3);
    
    $ladder[$a] = array_merge($topa, $topb);          // promote
    $ladder[$b] = array_merge($bota, $botb);          // demote
}
?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.