webForumDet fria alternativet

Sortera array

4 svar · 364 visningar · startad av Skarre

SkarreMedlem sedan apr. 20012 427 inlägg
#1

Jag har en tvådimensionell matris innehållande basketlag i den första dimensionen och information om deras resultat i den andra. Jag försöker sortera dessa efter en eller flera nycklar, t.ex. efter poäng, sedan målskillnad och sedan målfaktor för att få fram en resultattabell.

Ett index i den första dimensionen (ett lag) har följande nycklar:

$teams[$i]['name']
$teams[$i]['played']
$teams[$i]['won']
$teams[$i]['lost']
$teams[$i]['points_made']
$teams[$i]['points_given']
$teams[$i]['difference']
$teams[$i]['points']
$teams[$i]['point_factor']

Jag har lyckats sortera efter en nyckel i taget enligt nedan, men är osäker på hur jag sorterar efter flera nycklar.

function cmp ($a, $b) {
	return $a['points'] < $b['points'];
}
usort($teams,'cmp');

Tack på förhand!

AsterixMedlem sedan dec. 1999483 inlägg
#2

Så här kanske:

function cmp ($a, $b)
{
  if ($a['points'] == $b['points'])
  {
    if ($a['difference'] == $b['difference'])
    {
      return $a['point_factor'] < $b['point_factor'];
    }
    return $a['difference'] < $b['difference'];
  }
  return $a['points'] < $b['points'];
}
SkarreMedlem sedan apr. 20012 427 inlägg
#3

Det verkar fungera utmärkt! Tack ska du ha! :)

AsterixMedlem sedan dec. 1999483 inlägg
#4

Såg att du frågade om inbördesmöten så jag testar om jag får in det också. Inget är testat men i teorin bör det funka :)

function cmp ($a, $b)
{
  global $match;
  if ($a['points'] == $b['points'])
  {
    if ($a['difference'] == $b['difference'])
    {
      if ($a['point_factor'] == $b['point_factor'])
      {
        foreach ($match[$a['name']][$b['name']] as $value)
        {
          if ($value[0] > $value[1])
          {
            $a_point += 3;
          }
          elseif ($value[1] > $value[0])
          {
            $b_point += 3;
          }
          else
          {
            $a_point += 1;
            $b_point += 1;
          }
        }
        foreach ($match[$b['name']][$a['name']] as $value)
        {
          if ($value[0] > $value[1])
          {
            $b_point += 3;
          }
          elseif ($value[1] > $value[0])
          {
            $a_point += 3;
          }
          else
          {
            $a_point += 1;
            $b_point += 1;
          }
        }
        return $a_point < $b_point;
      }
        return $a['point_factor'] < $b['point_factor'];
    }
    return $a['difference'] < $b['difference'];
  }
  return $a['points'] < $b['points'];
}

$match['AIK']['DJURGÅRDEN'][] = array (1,0);
$match['AIK']['DJURGÅRDEN'][] = array (2,0);
$match['DJURGÅRDEN']['AIK'][] = array (7,0);
$match['DJURGÅRDEN']['AIK'][] = array (1,2);
SkarreMedlem sedan apr. 20012 427 inlägg
#5

Man tackar så mycket! Jag ska titta närmare på koden efter helgen.

132 ms totalt · 3 externa anrop · v20260731065814-full.91fd2ad2
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)