Hi,

ik heb een array

Array
(
    [club] => Array
        (
            [0] => 
            [1] => SC Gentbrugge
            [2] => SKVV
            [3] => SC Zwijnaarde
            [4] => SC Laarne
        )

    [punten] => Array
        (
            [0] => 0
            [1] => 8
            [2] => 3.5
            [3] => 3.5
            [4] => 9
        )

    [bordpunten] => Array
        (
            [0] => 0
            [1] => 33
            [2] => 23
            [3] => 17
            [4] => 47
        )

)


Welke ik probeer te sorteren op punten en bordpunten.
Hiervoor gebruik ik volgende code

uasort($resultaten, 'sortpunten');

function sortpunten($a, $b) {
	if ($a['punten'] == $b['punten']) {
		if($a['bordpunten'] == $b['bordpunten']){
			return 0;
		}else{
			return ($a['bordpunten'] > $b['bordpunten']) ? -1 : 1;
		}
	}
	return ($a['punten'] > $b['punten']) ? -1 : 1;		
}

Echter in de sorteer code wordt mijn array gesplitst in 2 afzonderlijke arrays

//$a
Array
(
    [0] => 0
    [1] => 8
    [2] => 3.5
    [3] => 3.5
    [4] => 9
)
//$b
Array
(
    [0] => 
    [1] => SC Gentbrugge
    [2] => SKVV
    [3] => SC Zwijnaarde
    [4] => SC Laarne
)

ik krijg dan ook de fout: Notice: Undefined index: (bord)punten.
Wat doe ik fout?

dank op voorhand voor de hulp
Jan
Een array bestaat uit elementen. Een sorteerfunctie pakt twee elementen, vergelijkt die met elkaar en rangschikt ze.

Als die elementen 'simpele' waardes zijn als getallen of strings is dat een fluitje van een cent. In jouw geval echter, zijn het arrays (club, punten en bordpunten).

Wat er nu gebeurt, is dat uasort twee van die sub-arrays pakt en die als waarde aan sortpunten doorgeeft. Je user-defined function krijgt dus twee arrays (van elk vijf elementen) en probeert te bepalen welk van die twee arrays het grootst is. Dat is waarschijnlijk niet wat je wilt.

Wat je wél wilt, is mij eerlijk gezegd niet geheel duidelijk uit je probleemomschrijving. Gaat het erom dat je punten en bordpunten als twee afzonderlijke arrays wilt sorteren? In dat geval zou iets als dit voldoende moeten zijn:

asort($resultaat['punten']);
asort($resultaat['bordpunten']);
Nee de array moet gewoon sorteren op eerst de punten indien gelijk op de bordpunten.
de hoofd index moet dus gelijk blijven. alle 1 elementen moeten bij elkaar blijven alle 2 elementen, enz.

jan
<?php
function sortX($arr)
{
for($i=1; $i<count($arr['punten']); $i++)
{
if($arr['punten'][$i-1] > $arr['punten'][$i])
{
$arr = sortX(swap($arr, $i));
}
elseif($arr['punten'][$i-1] == $arr['punten'][$i])
{
if($arr['bordpunten'][$i-1] > $arr['bordpunten'][$i])
{
$arr = sortX(swap($arr, $i));
}
}
}
return $arr;
}

function swap($arr, $i)
{
$punten = $arr['punten'][$i];
$bordpunten = $arr['bordpunten'][$i];
$club = $arr['club'][$i];
$arr['punten'][$i] = $arr['punten'][$i-1];
$arr['bordpunten'][$i] = $arr['bordpunten'][$i-1];
$arr['club'][$i] = $arr['club'][$i-1];
$arr['punten'][$i-1] = $punten;
$arr['bordpunten'][$i-1] = $bordpunten;
$arr['club'][$i-1] = $club;
return $arr;
}

$resultaten = sortX($resultaten);
?>
Beiden bedankt.
Ik moest eigenlijk mijn array beter opbouwen.

Array
(
    [0] => Array
        (
            [club] => 
            [punten] => 0
            [bordpunten] => 0
        )

    [1] => Array
        (
            [club] => SC Gentbrugge
            [punten] => 8
            [bordpunten] => 33
        )

    [2] => Array
        (
            [club] => SKVV
            [punten] => 3.5
            [bordpunten] => 23
        )

    [3] => Array
        (
            [club] => SC Zwijnaarde
            [punten] => 3.5
            [bordpunten] => 17
        )

    [4] => Array
        (
            [club] => SC Laarne
            [punten] => 9
            [bordpunten] => 47
        )

De uitleg van willem stuurde me in de juiste richting maar de euro viel wat traag :)
Bedankt

Reageren