Avatar billede dmg Nybegynder
29. juli 2005 - 10:31 Der er 8 kommentarer og
1 løsning

Hjælp til random funktion etc

Hej Experts.

Jeg er ved at lave et prioteringssystem til medarbejdere.

Afhængig af hvilken rækkefølge man har indtastet de forskellige ting i, kan resultatet blive forskelligt.

Her er et eksempel:
http://www.imgreactor.com/hosted/4761/sys.jpg

Kig på de to nederste brugere. Johanne og kåkkeren :-)

Man kan se øverst at der er 1 ledig plads i afdelingen "04 - FAST EJENDOM"

Hvis nu kåkkeren havde stået før johanne, så havde kåkkeren fået "04 - FAST EJENDOM" og johanne havde fået "01 - ERHVERVSRET".

Jeg henter alle brugere ind i et array og så eksekveres klassen for hver bruger. Det bliver så returneret i et array, hvor jeg modtager "OK", hvis brugeren blev tildelt en afdeling og "NONE" hvis den ikke kunne bestemmes, ligesom kåkkeren.

Så jeg bliver nødt til at hente brugerne i forskellige rækkefølger via en random funktion og evt lave en while-løkke, som siger kør denne while-løkke indtil resultat er "OK" og ikke "NONE".

Jeg slutter her for lige at være sikker på i er med. Jeg håber i kan hjælpe :-)
Avatar billede coderdk Praktikant
29. juli 2005 - 13:09 #1
Du har ikke stillet noget [klart] spørgsmål ;)
Avatar billede coderdk Praktikant
29. juli 2005 - 13:11 #2
Vil du "blande" brugerarrayet? shuffle( $brugere );
Se: http://dk2.php.net/shuffle
Avatar billede dmg Nybegynder
29. juli 2005 - 13:20 #3
Hehe... I know. De sidste gange jeg har lavet spørgsmål har folk ikke forstået hvad det gik ud på. Mit fagsprog inden for programmering er ikke særlig godt :(

Okay, her er koden. Linje 111-128 er en foreach løkke der løber et array igennem med medarbejdere. Dette array, skal randomseres så det er tilfældige medarbejdere der hentes, herefter skal jeg have lavet en while-løkke, udenom foreach-løkken, der prøver forskellige kombinationer indtil alle er fundet.

<?
if (!isset($_SESSION)) session_start();

include_once $_SERVER["DOCUMENT_ROOT"] .'/rokeringssystem/layout/path.php';
include_once $LocalPath."layout/uppermenuadmin.php";
include_once $LocalPath."layout/funktioner.php";

include_once $LocalPath."klasser/Afdeling/Afdeling.php";
include_once $LocalPath."klasser/Afdeling/AfdelingHandler.php";
include_once $LocalPath."klasser/AfdelingsBehov/AfdelingsBehov.php";
include_once $LocalPath."klasser/AfdelingsBehov/AfdelingsBehovHandler.php";
include_once $LocalPath."klasser/MedarbejderBehov/MedarbejderBehov.php";
include_once $LocalPath."klasser/MedarbejderBehov/MedarbejderBehovHandler.php";
include_once $LocalPath."klasser/Solution/SolutionHandler.php";


$oAfdelingBehov = new AfdelingsBehovHandler();
$readAllAfdelingerBehov = $oAfdelingBehov->readAllAfdelingsBehov();
$oMedarbejderBehov = new MedarbejderBehovHandler();
$readAllMedarbejderBehov = $oMedarbejderBehov->readAllMedarbejdersBehov();
$oSolutionHandler = new SolutionHandler();


$OverordnetCounter = 0;
$rowCounter = 0;

$AfdelingerArrayCounter = array();
$AllAfdelingerArray = array();
foreach($readAllAfdelingerBehov as $afdelinger)
{
    $AfdelingerArrayCounter[$afdelinger->getAfdeling()]['AfdelingId'] = $afdelinger->getAfdelingId();
    $AfdelingerArrayCounter[$afdelinger->getAfdeling()]['Afdeling'] = $afdelinger->getAfdeling();
    $AfdelingerArrayCounter[$afdelinger->getAfdeling()]['Counter'] = $afdelinger->getAntal();
   
    $OverordnetCounter = $OverordnetCounter + $AfdelingerArrayCounter[$afdelinger->getAfdeling()]['Counter'];
}

foreach($readAllAfdelingerBehov as $AllAfdelinger)
{
    $AllAfdelingerArray[$AllAfdelinger->getId()] = $AllAfdelinger->getAfdeling();
}


function LiveCounter($AfdelingerArrayCounter)
{
    $counter = 0;
    print "<br><b>Afdelingsbehov:</b><br>";
    foreach($AfdelingerArrayCounter as $key => $result)
    {
        $counter = $counter + $result['Counter'];
        $counterview = $result['Counter'] > 0 ? "<b>".$result['Afdeling']." ".$result['Counter']." Ledige</b><br>" : $result['Afdeling']." ".$result['Counter']." Ledige<br>";
        print $counterview;
    }
    return $counter;
}

function UpdateAfdelingerArrayCounter($UserInformationArray = "")
{
    global $AfdelingerArrayCounter;
   
    foreach($AfdelingerArrayCounter as $afdeling => $MainCounterArray)
    {
        if($MainCounterArray['AfdelingId'] == @$UserInformationArray['Priotet1'])
        {
            $CurrentUser = $UserInformationArray['MedarbejderId'];
            $AfdelingerArrayCounter[$UserInformationArray['AfdelingNavn1']]['Counter'] = $AfdelingerArrayCounter[$UserInformationArray['AfdelingNavn1']]['Counter'] - 1;
        }
        if($MainCounterArray['AfdelingId'] == @$UserInformationArray['Priotet2'])
        {   
            $CurrentUser = $UserInformationArray['MedarbejderId'];
            $AfdelingerArrayCounter[$UserInformationArray['AfdelingNavn2']]['Counter'] = $AfdelingerArrayCounter[$UserInformationArray['AfdelingNavn2']]['Counter'] - 1;
        }
        if($MainCounterArray['AfdelingId'] == @$UserInformationArray['Priotet3'])
        {   
            $CurrentUser = $UserInformationArray['MedarbejderId'];
            $AfdelingerArrayCounter[$UserInformationArray['AfdelingNavn3']]['Counter'] = $AfdelingerArrayCounter[$UserInformationArray['AfdelingNavn3']]['Counter'] - 1;
        }   
    }
    return $UserInformationArray;
}

function drawForm($SolutionResult)
{
    global $AllAfdelingerArray;
   
    $AfdelingsListe =  "<form name='FormName' action='myscript.php' method='post'>" .
          "<select size='1' name='Name' class='dropdown'>" . "";
          $AfdelingsListe .= "<option value='00'>Ingen match fundet</option>" . "";
   
    foreach($AllAfdelingerArray as $key => $afdelinger)
    {   
        if(@$SolutionResult['Result'])
        {
            $Selected = $SolutionResult['Result'] == $afdelinger ? "selected" : "";
            $AfdelingsListe .= "<option value='".$key."' ".$Selected.">".$afdelinger."</option>" . "";
        }
        else
        {
            $AfdelingsListe .= "<option value='".$key."'>".$afdelinger."</option>" . "";               
        }   
    }
    $AfdelingsListe .= "</select></form>";
    return $AfdelingsListe;       
}


print "<table border='2'>" .
        "<tr><th>Bruger</th><th>Priotet1</th><th>Priotet2</th><th>Priotet3</th><th>Forslag</th></tr>";
       

// Henter alle medarbejder ind i et array.
foreach($readAllMedarbejderBehov as $MedarbejderBehov)
{   
    $FinalResult = UpdateAfdelingerArrayCounter($result[$MedarbejderBehov->getId()] = $oSolutionHandler->Priotet1($MedarbejderBehov->getId(), $MedarbejderBehov->getPrio1Id(), $MedarbejderBehov->getPrio2Id(), $MedarbejderBehov->getPrio3Id(), $AfdelingerArrayCounter));
   
    if(@$FinalResult['Result'])
    {
        $SolutionResult1 = $FinalResult['Result'] == $MedarbejderBehov->getPrio1() ? "<a class='GreenText'><b>".$FinalResult['Result']."</b></a>" : $MedarbejderBehov->getPrio1();
        $SolutionResult2 = $FinalResult['Result'] == $MedarbejderBehov->getPrio2() ? "<a class='GreenText'><b>".$FinalResult['Result']."</b></a>" : $MedarbejderBehov->getPrio2();
        $SolutionResult3 = $FinalResult['Result'] == $MedarbejderBehov->getPrio3() ? "<a class='GreenText'><b>".$FinalResult['Result']."</b></a>" : $MedarbejderBehov->getPrio3();
        print "<tr class='".findtal($rowCounter++)."'><td>".$MedarbejderBehov->getNavn()."</td><td>".$SolutionResult1."</td><td>".$SolutionResult2."</td><td>".$SolutionResult3."</td><td>".drawForm($FinalResult)."</td></tr>";
    }
    else
    {
        print "<tr bgcolor='Red'><td>".$MedarbejderBehov->getNavn()."</td><td>".$MedarbejderBehov->getPrio1()."</td><td>".$MedarbejderBehov->getPrio2()."</td><td>".$MedarbejderBehov->getPrio3()."</td><td>".drawForm($FinalResult)."</td></tr>";
    }
       
}
   


print "Pladser ialt :".$OverordnetCounter;
print "<br>Ledige pladser ialt :".LiveCounter($AfdelingerArrayCounter);
print "</table>";
   

           
               
               

include_once $LocalPath."layout/lowermenu.php";
?>

Håber du kan hjælpe :-)
Avatar billede coderdk Praktikant
29. juli 2005 - 13:39 #4
Prøv, før din foreach på linje 112 (tror jeg) at sætte denne ind:
shuffle( $readAllMedarbejderBehov );
Avatar billede dmg Nybegynder
29. juli 2005 - 13:49 #5
hhhmm.... Det har jeg prøvet også denne:

$Antal = count($readAllMedarbejderBehov);
srand((float) microtime() * 10000000);
$rand_keys = array_rand($readAllMedarbejderBehov, $Antal);

Men min mysql server går ned hele tiden. Det er derfor jeg har lavet alle de her arrays, så den kan arbejde i hukommelsen istedet.

Men den går også ned når jeg prøver shuffle? Findes der andre alternativer?
Avatar billede coderdk Praktikant
29. juli 2005 - 15:57 #6
Det giver da ingen mening at den går ned når du prøver at shuffle et array? Det har jo intet med databasen at gøre?
Avatar billede dmg Nybegynder
29. juli 2005 - 21:58 #7
Jo, fordi readAllMedarbejderBehov er en klasse der henter en masse brugere fra databasen og eftersom den læser alt ind i hukommelsen inden den printer resulaterne på skærmen, måske er det måden jeg forbinder op mod databasen. Jeg modtager en masse quarys inde på databasen
Avatar billede coderdk Praktikant
29. juli 2005 - 22:08 #8
Aaah - Jeg troede at det var arrays med data i - Som var udtrukket ;P
Avatar billede dmg Nybegynder
05. september 2005 - 12:43 #9
jeg lukker denne.. Der er vist gået kuk i det... :(

Tak for hjælpen !!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester