Avatar billede jenslyn_s Nybegynder
12. maj 2005 - 21:29 Der er 6 kommentarer og
1 løsning

Sortere multidimensionelt array

Mit array skal sorteres efter "diff" DESC og "pos" DESC, men hvordan gør jeg. Er virkelig faret vild i alle sorterings-mulighederne.

Mit array --------->
$tempArrayMulti[] = array(
                                        "ID" => $id, "pos" => $pos, "neg" => $neg, "diff" => ($pos/$neg)
                                        );

Hilfe, bitte!
Avatar billede jenslyn_s Nybegynder
12. maj 2005 - 22:13 #1
Og nej, jeg kan ikke gøre det i mit database-kald... en eller anden ville sikkert foreslå dette før eller senere.
Avatar billede flushout Nybegynder
13. maj 2005 - 08:20 #2
Denne funktion kan mnok klare det for dig.. :)

---

function multiSort($arr,$key,$order){

  // Sorteret fra lille til stor:
  if ($order == 1){
      // sammenlign tal
      if (is_numeric($arr[0][$key])) {
          $compare = create_function('$a,$b','return 1*$a["'.$key.'"]-1*$b["'.$key.'"];');
      }
            // sammenlign strenge
            else {
          $compare = create_function('$a,$b','return strcasecmp($a["'.$key.'"],$b["'.$key.'"]);');
      }
  }
    // sorteret fra stor til lille:
  else {
      // sammenlign tal
      if (is_numeric($arr[0][$key])) {
          $compare = create_function('$a,$b','return 1*$b["'.$key.'"]-1*$a["'.$key.'"];');
      }
      // sammenlign strenge
      else {
          $compare = create_function('$a,$b','return strcasecmp($b["'.$key.'"],$a["'.$key.'"]);');
      }
    }

  usort($arr,$compare);
  return $arr;
}
Avatar billede flushout Nybegynder
13. maj 2005 - 08:21 #3
inputtet $arr er dit array, $key er den nøgle du vil sortere efter (i det eksempel du giver kan det være "diff" eller "pos" og order kan være 1 eller 2 afhængigt af hvilken vej du vil sortere det..
Avatar billede coderdk Praktikant
13. maj 2005 - 09:24 #4
function cmp($a, $b)
{
  if ($a['diff'] == $b['diff']) {
      return 0;
  }
  return ($a['diff'] < $b['diff']) ? -1 : 1;
}

usort( $tempArrayMulti, 'cmp' );
Avatar billede jenslyn_s Nybegynder
13. maj 2005 - 12:32 #5
Fik en god løsning fra anden side;
$tempArrayMulti = array();
// Tilføj data
$sortArray = array();
$resultArrayMulti = array();
foreach($tempArrayMulti as $key=>$a) {
    $sortArray[$key] = $a['diff'].'_'.$a['pos'];
}
arsort($sortArray);
reset($sortArray);
foreach($sortArray as $key=>$whatever) {
  $resultArrayMulti[] = $tmpArrayMulti[$key];
}
var_dump($resultArrayMulti);
Avatar billede jenslyn_s Nybegynder
13. maj 2005 - 12:33 #6
Tak for jeres svar :)
Avatar billede coderdk Praktikant
13. maj 2005 - 12:35 #7
hhehe den ser godt nok lidt "dum" ud, hvorfor ikke gøre det på den "rigtige" måde? ;)
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