Avatar billede danic Nybegynder
28. oktober 2006 - 20:28 Der er 12 kommentarer og
1 løsning

Tal gymnastik

Jeg har 8 variabler som alle kan have værdien fra 0 til 14.

$orden
$lering
$magt
$menneske
$netverk
$sikkerhed
$personligsuccees
$overlevelse

Jeg ønsker at printe de 3 værdier som har det højeste nummer. Hvis vis der er flere end 3 som har samme værdi, printes alle dem med samme værdi.
Eksempel:
14,10,8,8,8 eller 14,14,10
Avatar billede coderdk Praktikant
28. oktober 2006 - 20:38 #1
Hvorfor bruge individuelle variable, og ikke et array? Sådan her f.eks.:

$arr = array(
        'orden' => 0
        ,'lering' => 4
        ,'magt' => 1
        ,'menneske' => 5
        ,'netverk' => 8
        ,'sikkerhed' => 10
        ,'personligsuccees' => 2
        ,'overlevelse' => 3
    );
arsort( $arr );
foreach ( $arr as $k => $v )
{
    echo "$k = $v<br>";
}
Avatar billede danic Nybegynder
28. oktober 2006 - 21:07 #2
Det kan man også, men kan du hjælpe med at få lagt den ønsked logik ind i den?
Avatar billede coderdk Praktikant
28. oktober 2006 - 21:26 #3
Hvilken logik? :) De tre højeste numre?

$arr = array(
        'orden' => 0
        ,'lering' => 4
        ,'magt' => 1
        ,'menneske' => 5
        ,'netverk' => 8
        ,'sikkerhed' => 10
        ,'personligsuccees' => 2
        ,'overlevelse' => 3
    );
arsort( $arr );
$n = 1;
foreach ( $arr as $k => $v )
{
    echo "$k = $v<br>";
    $n++;
    if ( $n > 3 ) break;
}

?
Avatar billede danic Nybegynder
28. oktober 2006 - 21:30 #4
JA, men med med tjek om der er flere med samme værdi for så er det mere en 3 som skal udskives.
        'orden' => 0
        ,'lering' => 4
        ,'magt' => 1
        ,'menneske' => 5
        ,'netverk' => 8
        ,'sikkerhed' => 10
        ,'personligsuccees' => 8
        ,'overlevelse' => 8
Avatar billede coderdk Praktikant
28. oktober 2006 - 21:45 #5
Hmm prøv:

$old = -1;
foreach ( $arr as $k => $v )
{
    echo "$k = $v<br>";
    $n++;
    if ( $n > 3 && $v != $old ) break;
    $old = $v;
}
Avatar billede danic Nybegynder
28. oktober 2006 - 21:50 #6
Der er stadig kun 3'
Avatar billede coderdk Praktikant
28. oktober 2006 - 22:04 #7
hehe ok, prøv:

$old = -1;
foreach ( $arr as $k => $v )
{
    if ( $n > 3 && $old != $v ) break;
    echo "$k = $v<br>";
    $n++;
    $old = $v;
}

hvis det ikke virker, må jeg jo teste :D
Avatar billede danic Nybegynder
28. oktober 2006 - 22:09 #8
Nu er den tæt på.... men der kan jo være optil 6 ens tal, efter de 2 højeste.
Som her -> 10,9,4,4,4,4,4,4 kan det lade sig gøre at den får det hele med?
Avatar billede coderdk Praktikant
28. oktober 2006 - 22:28 #9
Det gør den da?

Med ovenstående kode får jeg skrevet dette ud:

orden = 10
lering = 9
personligsuccees = 4
overlevelse = 4
sikkerhed = 4
menneske = 4
magt = 4
netverk = 4
Avatar billede danic Nybegynder
28. oktober 2006 - 22:32 #10
Det gør den osse, det var en fejl i min kode :)

Super mange tak for hjælpen, du må meget gerne smide mig et svar!
Avatar billede danic Nybegynder
28. oktober 2006 - 22:55 #11
Kan man echo det hele til en variabel, nu hvor den udskriver med en lykke?
Det er fordi jeg ønsker at gemme resultatet så det både udskrives til skærmen men også kan benyttes i mail funktionen.

<?
    $arr = array(
        $ordendesc => $orden
        ,$leringdesc => $lering
        ,$magtdesc => $magt
        ,$menneskedesc => $menneske
        ,$netverkdesc => $netverk
        ,$sikkerheddesc => $sikkerhed
        ,$personligsucceesdesc => $personligsuccees
        ,$overlevelsedesc => $overlevelse
    );
arsort( $arr );
$n = 1;
$old = -1;
foreach ( $arr as $k => $v )
{
    if ( $n > 3 && $old != $v ) break;
    echo "<b>$v</b> $k<br>";
    $n++;
    $old = $v;
}
print"$result";
?>
Avatar billede coderdk Praktikant
28. oktober 2006 - 23:27 #12
Ok :)
Avatar billede coderdk Praktikant
28. oktober 2006 - 23:29 #13
<?
    $arr = array(
        $ordendesc => $orden
        ,$leringdesc => $lering
        ,$magtdesc => $magt
        ,$menneskedesc => $menneske
        ,$netverkdesc => $netverk
        ,$sikkerheddesc => $sikkerhed
        ,$personligsucceesdesc => $personligsuccees
        ,$overlevelsedesc => $overlevelse
    );
arsort( $arr );
$n = 1;
$old = -1;
$result = "";
foreach ( $arr as $k => $v )
{
    if ( $n > 3 && $old != $v ) break;
    $result .= "<b>$v</b> $k<br>";
    $n++;
    $old = $v;
}
echo $result;
?>
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