Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
  #1  
Old 03-31-2008, 12:01 AM
Adrian Schneider's Avatar
Adrian Schneider Adrian Schneider is offline
 
Join Date: Jul 2004
Posts: 2,528
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Compare array with unique array...
PHP Code:
$values = array(35, ... );
$set_contains_dupes $values === array_unique($values); 
This code I wrote last year might help you with some other automation, but here's what I used to validate a submitted team (quite complex rules) :

PHP Code:
/**
 * Checks a submitted team (create/edit) for validity. 
 * 
 * @return    mixed        true on success; string on failure (error msg)
 */
protected function verifySubmittedTeam()
{
    
$variablePositions = array('batsman''bowler');
    
    
$data = array();
    
$totalPlayers = array();
    
    
$wicketkeepers $this->countWicketKeepers();

    foreach (
$this->Player->positions as $identifier => $bit)
    {
        
####################################################################
        // Main Team
        
        
$data[$identifier] = $this->vb->input->clean_gpc(
            
'p'
            
$identifier
            
TYPE_ARRAY_UINT
        
);
        
        
// Removing Invalid/Empty Players
        
foreach ($data[$identifier] as $index => $playerid)
        {
            
$name $this->availablePlayers[$playerid]['name'];
            
            if (!
$playerid)
            {
                unset(
$data[$identifier][$index]);
            }
            else if (empty(
$this->availablePlayers[$playerid]))
            {
                return 
"$name is not an available player for this game.";
            }
            else if (!(
$this->availablePlayers[$playerid]['positions'] & $bit))
            {
                return 
"$name is not an available $identifier for this game.";
            }
            
            
$totalPlayers[$playerid]++;
        }
    
        
$count    count($data[$identifier]);
        
$required $this->Team->slots[1][$identifier];
        
        
// Check player counts for static positions
        
if (
            
$count != $required and (
                
$this->game['type'] == or (
                    
in_array($this->game['type'], array(13)) and 
                    !
in_array($identifier$variablePositions)
                )
            )
        )
        {
            
$title =  $this->Player->positionText[$identifier];
                
            return 
"You have selected $count players for the $title position.  A valid team
            must contain exactly 
$required.";
        }
        
        
$data['special'][$identifier] = $this->vb->input->clean_gpc(
            
'p'
            
"special_$identifier",
            
TYPE_ARRAY_UINT
        
);
        
        
####################################################################
        // Reserves
        
        
$data["r_$identifier"] = $this->vb->input->clean_gpc(
            
'p'
            
"r_$identifier"
            
TYPE_ARRAY_UINT
        
);    
        
        
// Removing Invalid/Empty Players
        
foreach ($data["r_$identifier"] as $index => $playerid)
        {
            
$name $this->availablePlayers[$playerid]['name'];
            
            if (!
$playerid and !($identifier == 'wicketkeeper' and  $wicketkeepers == and $index == 1))
            {
                unset(
$data["r_$identifier"][$index]);
                return 
"Please select a player for reserve $identifier # " . ($index 1) . ".";
            }
            
            if (
$playerid and empty($this->availablePlayers[$playerid]))
            {
                return 
"$name is not an available player for this game.";
            }
            
            
// Error on Unavailable Position
            
if ($playerid and !($this->availablePlayers[$playerid]['positions'] & $bit))
            {
                return 
"$name is not an available $identifier for this game.";
            }
            
            
$totalPlayers[$playerid]++;
        }
        
        
        
// Incorrect # of Players
        
if (($count count($data["r_$identifier"])) != ($required $this->Team->slots[1]["r_$identifier"]))
        {
            if (!(
                
$identifier == 'wicketkeeper' and 
                
$wicketkeepers == and 
                
$required == and
                
$count == 1
            
))
            {
                
$title 'Reserve ' $this->Player->positionText[substr($identifier2)];

                return 
"You have selected $count players for the $identifier position.  A valid team
                must contain exactly 
$required.";
            }
        }
    }
    
    
// Check variable ODI positions
    
if ($this->game['type'] == or $this->game['type'] == 3)
    {
        
$numBatsmen count($data['batsman']);
        
$numBowlers count($data['bowler']); 
        
        if (
$numBatsmen == 5)
        {
            if (
$numBowlers != 3)
            {
                return 
'With 5 batsmen, you must have <strong>3</strong> bowlers.';
            }
        }
        else if (
$numBatsmen == 4)
        {
            if (
$numBowlers != 4)
            {
                return 
'With 4 batsmen, you must have <strong>4</strong> bowlers.';
            }
        }
        else
        {
            return 
'You must have either 4 or 5 batsmen for your team to be valid.';
        }            
    }
        
    foreach (
$totalPlayers as $playerid => $num)
    {
        if (
$playerid and $num 1)
        {
            
$name $this->availablePlayers[$playerid]['name'];
            
            return 
"You can only use each player once; $name is in $num positions.";
        }
    }
    
    
$bonus = array();
    
    foreach (
$data['special'] as $identifier => $players)
    {
        foreach (
$players as $num => $type)
        {
            if (
$type)
            {
                if (
strpos($identifier'r_') !== false)
                {
                    return 
'You may only select bonuses for main players.';
                }
                
                if (empty(
$data[$identifier][$num]))
                {
                    continue;
                }
                
$bonus[$data[$identifier][$num]] = $type;
            }
        }
    }
    
    
$this->bonusPlayers $bonus;
    unset(
$data['special'], $bonus);
    
    
$expected = array(11112);
    
    
$sorted array_values($this->bonusPlayers);
    
sort($sorted);
    
    if (
$sorted !== $expected)
    {
        
$assoc = array(=> 'bonus players'=> 'captains');
        
$selected array_count_values($sorted) + array(=> 0=> 0);
        
        return 
"You must pick 4 bonus players and one captain; you have
            
$selected[1] $assoc[1] and $selected[2] $assoc[2].";
    }
    


    
$this->submittedTeam $data;
    return 
true;
    

Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 02:14 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04303 seconds
  • Memory Usage 2,335KB
  • Queries Executed 12 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (2)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)showthread_list
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_threadedmode.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids_threaded
  • showthread_threaded_construct_link
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete