php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.01.2012, 18:09  
Neuer Benutzer
 
Registriert seit: 24.02.2010
Beiträge: 17
PHP-Kenntnisse:
Anfänger
markas befindet sich auf einem aufstrebenden Ast
Standard Turnierplan

Hallo,
mit dem folgenden Script wird ein Spielplan generiert. Die Rückrunde wurde auskommentiert, da es für ein Turnier nicht brauchbar ist. Dafür brauche ich aber eine zweite Gruppe. Im Moment wird dadurch nur ein Spielplan für eine Gruppe generiert. Wer hat eine Idee wie man das Script um zusätzliche Gruppe erweitern könnte? Die Spiele der anderen Gruppe sollen dann gemischt mit der ersten Gruppe stattfinden(also nicht zuerst alle Spiele der ersten Gruppe und dann der nächsten, sondern 1 Spiel Gruppe 1 dann 1 Spiel Gruppe 2, oder 2 Spiele Gruppe 1 und dann 2 Spiele Gruppe 2).

PHP-Code:
if(count($teams) % ){ 
        
array_push($teams '[FREI]'); 
    } 
    
$anz    count($teams);      // Anzahl der Teams im Array $teams 
    
$paare  $anz/2;            // Anzahl der möglichen Spielpaare 
    
$tage  $anz-1;            // Anzahl der Spieltage pro Runde 
    
$spiele $paare*$tage;    // Anzahl der Spiele pro Hin-/Rück-Runde 
    
$plan  = array();            // Array für den kompletten Spielplan 
    
$xpos  $anz-1;            // höchster Key im Array $teams 
    
$tag    0;                  // Zähler für Spieltag 
    
$spnr  0;                  // Zähler für Spielnummer 
    
$sppaar 0;                // Zähler für Spielpaar 
    
$i      0;                    // Schleifenzähler 
    
// ================================================================================ 
      
for ($tag=1$tag<$anz$tag++) { 
        
array_splice ($teams11, array(array_pop($teams),$teams[1])); 
        for (
$sppaar=0$sppaar<$paare$sppaar++) { 
            
$spnr++; 
            
// wechseln zwischen G und H -Spiel: 
            
if (($spnr%$anz!=1) and ($sppaar%2==0)) { 
                
$hteam $teams[$sppaar]; 
                
$gteam $teams[$xpos-$sppaar]; 
            }  else { 
                
$gteam $teams[$sppaar]; 
                
$hteam $teams[$xpos-$sppaar]; 
            } 
            
$plan[$tag][$spnr]["G"] = $gteam;                // für Hin-Runde 
            
$plan[$tag][$spnr]["H"] = $hteam;                // für Hin-Runde 
            //$plan[$tag+$tage][$spnr+$spiele]["G"] = $hteam;  // für Rück-Runde 
           // $plan[$tag+$tage][$spnr+$spiele]["H"] = $gteam;  // für Rück-Runde 
        

      } 
      
ksort($plan); /* nach Spieltagen sortieren */ 
markas ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.01.2012, 18:29  
Erfahrener Benutzer
 
Registriert seit: 22.07.2004
Beiträge: 226
DirkHo befindet sich auf einem aufstrebenden Ast
Standard

Hi,

mach doch ein mehrdimensionales Array mit [<GRUPPE>][<TEAM>].

Und dann gibst du eben abwechselnd die Gruppen aus. Ist doch nicht so schwer?!

Grüße,

Dirk
DirkHo ist offline   Mit Zitat antworten
Alt 12.01.2012, 21:16  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Habe mal ein wenig gebastelt:

PHP-Code:
<?php

interface CalendarEventInterface
{
    public function 
getStartDate();
}

abstract class 
CalendarEventAbstract implements CalendarEventInterface
{
    protected 
$startDate;

    public function 
__construct(DateTime $startDate)
    {
        
$this->startDate $startDate;
    }

    public function 
getStartDate()
    {
        return 
$this->startDate;
    }
}

class 
CalendarEventMatch extends CalendarEventAbstract
{
    protected 
$group;
    protected 
$match;

    public function 
getGroup()
    {
        return 
$this->group;
    }

    public function 
setGroup(Group $group)
    {
        
$this->group $group;
    }

    public function 
getMatch()
    {
        return 
$this->match;
    }

    public function 
setMatch(Match $match)
    {
        
$this->match $match;
    }

    public function 
__toString()
    {
        
$homeName = ($this->match->getHomeTeam() !== null)
                ? 
$this->match->getHomeTeam()->getName()
                : 
'(wildcard)';

        
$awayName = ($this->match->getAwayTeam() !== null)
                ? 
$this->match->getAwayTeam()->getName()
                : 
'(wildcard)';

        return 
$this->group->getName() . ': ' $homeName ' - ' $awayName;
    }
}

class 
Calendar
{
    protected 
$events;

    public function 
addEvent(CalendarEventInterface $event)
    {
        
$y $event->getStartDate()->format('Y');
        
$m $event->getStartDate()->format('m');
        
$d $event->getStartDate()->format('d');

        
$this->events[$y][$m][$d][] = $event;
    }

    public function 
getEventsByDate(DateTime $date)
    {
        
$y $date->format('Y');
        
$m $date->format('m');
        
$d $date->format('d');

        if (isset(
$this->events[$y][$m][$d])) {
            return 
$this->events[$y][$m][$d];
        }

        return array();
    }
}

interface 
FixtureStrategyInterface
{

}

class 
FixtureStrategyRoundRobin implements FixtureStrategyInterface
{
    protected 
$addReturnFixtures;

    public function 
__construct($addReturnFixtures true)
    {
        
$this->addReturnFixtures $addReturnFixtures;
    }

    public function 
getFixtures(array $teams)
    {
        
$addReturnFixtures $this->addReturnFixtures;

        if (
count($teams) % !== 0) {
            
array_push($teamsnull);
        }

        
$anz    count($teams);    // Anzahl der Teams im Array $teams
        
$paare  $anz 2;         // Anzahl der möglichen Spielpaare
        
$tage   $anz 1;         // Anzahl der Spieltage pro Runde
        
$spiele $paare $tage;   // Anzahl der Spiele pro Hin-/Rück-Runde
        
$plan   = array();          // Array für den kompletten Spielplan
        
$xpos   $anz 1;         // höchster Key im Array $teams
        
$tag    0;                // Zähler für Spieltag
        
$spnr   0;                // Zähler für Spielnummer
        
$sppaar 0;                // Zähler für Spielpaar

        // =====================================================================
        
for ($tag 1$tag $anz$tag++) {
            
array_splice($teams11, array(array_pop($teams), $teams[1]));

            
$firstLegMatches = array();
            
$secondLegMatches = array();

            for (
$sppaar 0$sppaar $paare$sppaar++) {
                
$spnr++;

                
// wechseln zwischen G und H -Spiel:
                
if (($spnr $anz !== 1) && ($sppaar === 0)) {
                    
$hteam $teams[$sppaar];
                    
$gteam $teams[$xpos $sppaar];
                }  else {
                    
$gteam $teams[$sppaar];
                    
$hteam $teams[$xpos $sppaar];
                }

                
// Hinrunde
                
$firstLegMatches[] = new Match($hteam$gteam);
                
// $tag, $spnr

                // Rückrunde
                
if ($addReturnFixtures) {
                    
$secondLegMatches[] = new Match($hteam$gteam);
                }
                
// $tag + $tage, $spnr + $spiele
            
}

            
$plan[] = new Matchday($tag$firstLegMatches);

            if (
$addReturnFixtures) {
                
$plan[] = new Matchday($tag $tage$secondLegMatches);
            }
        }

        
// Nach Spieltagen sortieren
        
usort($plan, function ($a$b) { return $a->getDay() - $b->getDay(); });

        return 
$plan;
    }
}

class 
Group
{
    protected 
$name;
    protected 
$teams;
    protected 
$matchdays;

    public function 
__construct($name, array $teams,
            
FixtureStrategyInterface $fixtureStrategy)
    {
        
$this->name $name;
        
$this->teams $teams;
        
$this->matchdays $fixtureStrategy->getFixtures($teams);
    }

    public function 
getName()
    {
        return 
$this->name;
    }

    public function 
getTeams()
    {
        return 
$this->teams;
    }

    public function 
getMatchdays()
    {
        return 
$this->matchdays;
    }
}

class 
Team
{
    protected 
$name;

    public function 
__construct($name)
    {
        
$this->name $name;
    }

    public function 
getName()
    {
        return 
$this->name;
    }
}

class 
Match
{
    protected 
$homeTeam;
    protected 
$awayTeam;

    public function 
__construct(Team $homeTeam nullTeam $awayTeam null)
    {
        
$this->homeTeam $homeTeam;
        
$this->awayTeam $awayTeam;
    }

    public function 
getHomeTeam()
    {
        return 
$this->homeTeam;
    }

    public function 
getAwayTeam()
    {
        return 
$this->awayTeam;
    }
}

class 
Matchday
{
    protected 
$matches;
    protected 
$day;

    public function 
__construct($day, array $matches)
    {
        
$this->day $day;
        
$this->matches $matches;
    }

    public function 
getMatches()
    {
        return 
$this->matches;
    }

    public function 
getDay()
    {
        return 
$this->day;
    }
}

$teamify = function(array $names)
{
    
$teams = array();

    foreach (
$names as $name) {
        
$teams[] = new Team($name);
    }

    return 
$teams;
};

$fs = new FixtureStrategyRoundRobin(false);

$groups = array(
    new 
Group('A'$teamify(array('Griechenland''Polen''Russland''Tschechien')), $fs),
    new 
Group('B'$teamify(array('Dänemark''Deutschland''Niederlande''Portugal')), $fs),
    new 
Group('C'$teamify(array('Irland''Italien''Kroatien''Spanien')), $fs),
    new 
Group('D'$teamify(array('Frankreich''England''Ukraine''Schweden')), $fs),
    
#new Group('X', $teamify(array('Brasilien', 'Argentinien', 'Mexiko')), $fs)
);

$calendar = new Calendar();

// Add matches to calendar

foreach ($groups as $group) {
    
$dt = new DateTime();
    foreach (
$group->getMatchdays() as $matchday) {
        
/* @var $matchday Matchday */
        
foreach ($matchday->getMatches() as $match) {
            
$myDt = clone $dt;
            
$cem = new CalendarEventMatch($myDt);
            
$cem->setGroup($group);
            
$cem->setMatch($match);
            
$calendar->addEvent($cem);
            
$dt->add(new DateInterval('P1D'));
        }
    }
}

// Display calendar

$dt = new DateTime();

for (
$i 0$i 10$i++) {

    echo 
'[' $dt->format('Y-m-d') . ']' "\n";

    
$events $calendar->getEventsByDate($dt);

    if (
count($events) > 0) {
        foreach (
$events as $event) {
            echo 
$event "\n";
        }
    } else {
        echo 
'  -' "\n";
    }

    echo 
"\n";

    
$dt->add(new DateInterval('P1D'));
}
__________________
Blog | Buch | Kaloa
mermshaus ist gerade online   Mit Zitat antworten
Alt 13.01.2012, 18:16  
Neuer Benutzer
 
Registriert seit: 24.02.2010
Beiträge: 17
PHP-Kenntnisse:
Anfänger
markas befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von DirkHo Beitrag anzeigen
Hi,

mach doch ein mehrdimensionales Array mit [<GRUPPE>][<TEAM>].

Und dann gibst du eben abwechselnd die Gruppen aus. Ist doch nicht so schwer?!

Grüße,

Dirk
Ich bekomme die Teams(nur eine Gruppe) so:
$teams = array("eins","zwei","drei","vier");
Falls der Einbau der zweite Gruppe so einfach ist, würde mich hier über zu dem oben von mir geposteten Script passenden Code freuen.
markas ist offline   Mit Zitat antworten
Alt 13.01.2012, 18:23  
Neuer Benutzer
 
Registriert seit: 24.02.2010
Beiträge: 17
PHP-Kenntnisse:
Anfänger
markas befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von mermshaus Beitrag anzeigen
Habe mal ein wenig gebastelt:

PHP-Code:
<?php

interface CalendarEventInterface
{
    public function 
getStartDate();
}
........
Danke, es funktioniert auch gut hier die Ausgabe:
Code:
[2012-01-01] 
A: Russland - Griechenland 
B: Niederlande - Dänemark 
C: Kroatien - Irland 
D: Ukraine - Frankreich 
X: Mexiko - Brasilien 

[2012-01-02] 
A: Polen - Tschechien 
B: Deutschland - Portugal 
C: Italien - Spanien 
D: England - Schweden 
X: Argentinien - (wildcard) 

[2012-01-03] 
A: Griechenland - Polen 
B: Dänemark - Deutschland 
C: Irland - Italien 
D: Frankreich - England 
X: Brasilien - Argentinien 

[2012-01-04] 
A: Tschechien - Russland 
B: Portugal - Niederlande 
C: Spanien - Kroatien 
D: Schweden - Ukraine 
X: (wildcard) - Mexiko 

[2012-01-05] 
A: Tschechien - Griechenland 
B: Portugal - Dänemark 
C: Spanien - Irland 
D: Schweden - Frankreich 
X: (wildcard) - Brasilien 

[2012-01-06] 
A: Russland - Polen 
B: Niederlande - Deutschland 
C: Kroatien - Italien 
D: Ukraine - England 
X: Mexiko - Argentinien 

[2012-01-07] 
- 
[2012-01-08] 
- 
[2012-01-09] 
- 
[2012-01-10]
Wie könnte man hier die Gruppen und teams mit array z.B. teams[] und gruppe [] (wird aus einem Formular weitergeleitet) ersetzen?
markas ist offline   Mit Zitat antworten
Alt 13.01.2012, 18:30  
meikel
Gast
 
Beiträge: n/a
Standard

Lustig. Der eine (nicht Du) will fette Videos in die Datenbank packen und Du möchtest eine simple SQL Anwendung mit plain-PHP nachstricken.
  Mit Zitat antworten
Alt 13.01.2012, 18:48  
Neuer Benutzer
 
Registriert seit: 24.02.2010
Beiträge: 17
PHP-Kenntnisse:
Anfänger
markas befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von meikel Beitrag anzeigen
Lustig. Der eine (nicht Du) will fette Videos in die Datenbank packen und Du möchtest eine simple SQL Anwendung mit plain-PHP nachstricken.
Einsteigerforum, freiwillig, Niemand wird zu irgendwas gezwungen. Nicht alle sind so hell wie Du und wollen sich eventuell trotzdem aus 1000000 verschiedenen Gründen zwischen einem Konzert und Fussballspiel an PHP und Mysql versuchen.
markas ist offline   Mit Zitat antworten
Alt 13.01.2012, 18:51  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von markas Beitrag anzeigen
Einsteigerforum, freiwillig, Niemand wird zu irgendwas gezwungen.
Dein Ding. War nur ein ironisch verpackter Tip, wie Du einige absehbare Probleme erschlagen kannst.
  Mit Zitat antworten
Alt 13.01.2012, 18:55  
Neuer Benutzer
 
Registriert seit: 24.02.2010
Beiträge: 17
PHP-Kenntnisse:
Anfänger
markas befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von meikel Beitrag anzeigen
Dein Ding. War nur ein ironisch verpackter Tip, wie Du einige absehbare Probleme erschlagen kannst.
Ein Tip, mit dem ich nichts anfangen kann?
markas ist offline   Mit Zitat antworten
Alt 13.01.2012, 19:04  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

PHP-Code:
// Display calendar 

$dt = new DateTime(); 

for (
$i 0$i 10$i++) { 

    echo 
'[' $dt->format('Y-m-d') . ']' "\n"

    
$events $calendar->getEventsByDate($dt); 

    if (
count($events) > 0) { 
        foreach (
$events as $event) { 
            echo 
$event "\n"
        } 
    } else { 
        echo 
'  -' "\n"
    } 

    echo 
"\n"

    
$dt->add(new DateInterval('P1D')); 

ähm ja genau

PHP-Code:
$start date_create();
$end date_create()->add('+10 Days');
$iterateMe = new DatePeriod$start, new DatePeriod('P1D'), $end );

$output = array();

foreach ( 
$iterateMe as $currentDate ) {
  
$output[] = '['.$currentDate->format('Y-m-d').']';
  
  
$events $calendar->getEventsByDate($currentDate);
  if ( 
count($events) == $output[] = '  -';
  foreach ( 
$events as $event $output[] = $event;

  
$output[] = '';
}

echo 
join("\n"$output); 
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
turnierplan php, teamify mermshaus, spielplan script php, anzahl spiele hin rück, turnierplaner php script, turnierplan in php, turnier php script, php turnierplan, $homename = ($this->match->gethometeam() !== null), turnierplaner php, gruppen script turnier, turnierplaner php mysql, turnierplan gruppe

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:49 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum