Avatar billede wilweb Nybegynder
30. december 2007 - 22:00 Der er 21 kommentarer og
1 løsning

array sortering

Hvordan kan jeg sortere et flere dim array som dette her?

$arrResultat[] = array("txt0", 56);
$arrResultat[] = array("txt1", 187);
$arrResultat[] = array("txt2", 42);
$arrResultat[] = array("txt3", 192);
$arrResultat[] = array("txt4", 36);
Avatar billede nielle Nybegynder
30. december 2007 - 22:23 #1
Sådan?

function cmp($a, $b)
{
    $valA = $a[1];
    $valB = $b[1];

    if ($valA == $valB) {
        return 0;
    }

    return ($valA < $valB) ? -1 : 1;
}

usort($arrResultat, "cmp");


Læs mere om usort() her:

http://dk2.php.net/manual/en/function.usort.php
Avatar billede jakobdo Ekspert
30. december 2007 - 22:24 #2
Du kunne kigge på: http://dk2.php.net/usort
Så skal du lave din egen cmp() funktion.
Avatar billede jakobdo Ekspert
30. december 2007 - 22:24 #3
Note til Jakob: Husk at trykke F5 inden du poster! :o)
Avatar billede wilweb Nybegynder
04. januar 2008 - 23:02 #4
Jeg kan desværre ikke få jeres gode henvisninger til at virke, lige meget, hvor meget jeg læser om det!

//resultat
$area1    = "Karriere og uddannelse";
$area2    = "Parforhold";
$area3    = "Familie og børn";
$area4    = "Venner og social omgangskreds";
$area5    = "Sundhed";
$area6    = "Bolig og omgivelser";
$area7    = "Økonimi";
$area8    = "Fritidsinteresser";

$arrResultat[] = array($area1, 100);
$arrResultat[] = array($area2, 90);
$arrResultat[] = array($area3, 80);
$arrResultat[] = array($area4, 70);
$arrResultat[] = array($area5, 60);
$arrResultat[] = array($area6, 50);
$arrResultat[] = array($area7, 100);
$arrResultat[] = array($area8, 80);

function cmp($a, $b){
    $valA = $a[1];
    $valB = $b[1];

    if ($valA == $valB) {
        return 0;
    }

    return ($valA < $valB) ? -1 : 1;
}

usort($arrResultat, "cmp");


foreach ($a as $key => $value) {
    echo "$key: $value\n";
}
Avatar billede jensgram Nybegynder
04. januar 2008 - 23:08 #5
Du mener vel

foreach ($arrResultat as $key => $value) {
    echo "$key: $value\n";
}
Avatar billede jensgram Nybegynder
04. januar 2008 - 23:09 #6
Mere interessant:

foreach ($arrResultat as $arr) {
    print_r($arr);
    print "\n";
}
Avatar billede nielle Nybegynder
04. januar 2008 - 23:12 #7
foreach ($arrResultat as $key => $value) {
    echo "$key: ";
    echo $value[0] . ", " . $value[1] . "<br>\n";
}
Avatar billede wilweb Nybegynder
05. januar 2008 - 01:18 #8
Tak!
jeg fik denne til at virke:
$area1    = "Karriere og uddannelse";
$area2    = "Parforhold";
$area3    = "Familie og børn";
$area4    = "Venner og social omgangskreds";
$area5    = "Sundhed";
$area6    = "Bolig og omgivelser";
$area7    = "Økonimi";
$area8    = "Fritidsinteresser";

$arrResultat[] = array($area1, 100);
$arrResultat[] = array($area2, 90);
$arrResultat[] = array($area3, 80);
$arrResultat[] = array($area4, 70);
$arrResultat[] = array($area5, 60);
$arrResultat[] = array($area6, 50);
$arrResultat[] = array($area7, 100);
$arrResultat[] = array($area8, 80);

function cmp($a, $b){
    $valA = $a[1];
    $valB = $b[1];
    if ($valA == $valB) {
        return 0;
    }
    return ($valA < $valB) ? -1 : 1;
}
usort($arrResultat, "cmp");

foreach ($arrResultat as $arr) {
    print_r($arr);
    print "\n<br>";
}


Udskriften bliver herefter sådan:
Array ( [0] => Bolig og omgivelser [1] => 50 )
Array ( [0] => Sundhed [1] => 60 )
Array ( [0] => Venner og social omgangskreds [1] => 70 )
Array ( [0] => Familie og børn [1] => 80 )
Array ( [0] => Fritidsinteresser [1] => 80 )
Array ( [0] => Parforhold [1] => 90 )
Array ( [0] => Karriere og uddannelse [1] => 100 )
Array ( [0] => Økonimi [1] => 100 )

Kan det lade sig gøre at det udskrives således:
Bolig og omgivelser 50
Sundhed 60
Venner og social omgangskreds 70
Familie og børn 80
Fritidsinteresser 80
Parforhold 90
Karriere og uddannelse 100
Økonimi 100
Avatar billede wilweb Nybegynder
05. januar 2008 - 01:19 #9
Ok det er jo det det gør hos nielle....

Svar så deler jeg point....
Avatar billede wilweb Nybegynder
05. januar 2008 - 01:26 #10
Der er vel ingen måde jeg kan udskrive fx:
echo $arrResultat[4,4];

Grunden til jeg spørger er at det ville jo være meget dejligt hvis jeg kunne have adgang til $arrResultat[]
Avatar billede nielle Nybegynder
05. januar 2008 - 08:38 #11
PHP ser ikke ud til at understøtte multi-dimenstionelle arrays, så du kan ikke lave noget hvor du kan skrive:

$arrResultat[4, 4]

Det understøtter arrays-af-arrays(jaged arrays), og du kan derfor godt lave noget som:

$arrResultat[4][4]

Jeg kan dog ikke lige helt gennemskue hvad du ville have ud af denne?

PS: Faktisk bruger du selv et array-af-arrays i din kode.
Avatar billede nielle Nybegynder
05. januar 2008 - 08:40 #12
"jagged arrays" = "ujævne arrays"
Avatar billede wilweb Nybegynder
05. januar 2008 - 10:11 #13
Mange tak for hjælpen.
Det var måske også lidt kyptisk skrevet, men det er en personlghedstest jeg vil lave. Egentlig er jeg mere hjernevrider end PHPvrider, hvis man kan sige det sådan.

Brugeren svarer på nogle spørgsmål og så kan man se, hvilken områder der skal arbejdes med. Starter med den laveste og så ville jeg jo gerne have at man kunne gå til næste område bagefter.
Fx med $arrResultat[1][1]
Det var såment bare det jeg forsøgte på....
Endnu en gang tak..
Avatar billede nielle Nybegynder
05. januar 2008 - 17:15 #14
Jeg kan desværre stadigvæk ikke lige gennemskue hvad du mener med de to talværdier:

$arrResultat[$x][$y]

Hvad er der $x og $y hver især skal refererer til?
Avatar billede wilweb Nybegynder
05. januar 2008 - 17:55 #15
Det er nok mit php niveau det er galt med.

Jeg troede at jeg kunne få mere kontrol over hvad det ligger i arrayet, men hvis php ikke understøtte multi-dimenstionelle arrays er det nok vanskeligt.
Avatar billede wilweb Nybegynder
05. januar 2008 - 17:56 #16
er der ikke noget med du er expert på udtræk fra databaser?
http://www.eksperten.dk/spm/813089
Avatar billede nielle Nybegynder
05. januar 2008 - 17:58 #17
Ikke mere end så mange andre herinde. Hvis du allerede har jakobdo på den så burde du være godt på vej til en løsning. :^)
Avatar billede nielle Nybegynder
05. januar 2008 - 17:59 #18
Jagged arrays er såmæn en udemærket substitut for multidimentionelle arrays. Det er mere din problemstilling jeg endnu ikke har forstået helt.
Avatar billede wilweb Nybegynder
06. januar 2008 - 12:47 #19
Jeg ved ikke om det her gør det mere klart:

Det er en test jeg er ved at lave.
Når der er svaret på testen, skal svarene tilknyttes et område.
$arrResultat[] = array($area8, 80);

Så var det idéen at jeg kunne finde det område med den laveste score. (sorteringen).

Så tænkte jeg det var muligt, at finde ud af hvad der var blevet svaret på de andre områder. fx ved at tag Resultat[område1][svar1]

Jeg vil gerne have adgang til hvad der er blevet svaret på hvert enkelt område.
Avatar billede nielle Nybegynder
07. januar 2008 - 18:18 #20
Hvorfor ikke bare sådan

$arrResultat[$area8] = 80;

og så bruge asort()

http://dk.php.net/manual/en/function.asort.php
Avatar billede wilweb Nybegynder
21. januar 2008 - 13:02 #21
nielle :> Tak det virker
Avatar billede nielle Nybegynder
21. januar 2008 - 19:47 #22
Tak for point :^)
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