Avatar billede martin-gert Nybegynder
11. marts 2009 - 22:49 Der er 1 løsning

PHP : Gensortering af 2 arrays ud fra det ene!

Hejsa

Jeg har et hovedarray der skal angive hvordan sorteringen skal være.

Lad os kalde det $array_one.

Jeg har derudover også et array, $array_two. hvor nøglerne følger $array_ones - altså: Rækkefølgen i de to arrays passer sammen.

Dvs. at $array_one[0] hører sammen med $array_two[0], $array_one[1] hører sammen med $array_two[1] osv.

Som udgangspunkt ligger hovedarrayet, $array_one i korrekt rækkefølge. Men da min funktion skal give mulighed for at ændre på denne rækkefølge, er jeg stået lidt af (Har nørdet i 12 timer med generel php og mysql, så er ved at være ristet).

Når man nu ændrer strukturen i $array_one fra fx:

Array => (0 => 5, 1 => 10, 2 => 15)

Til:

Array => (0 => 10, 1 => 5, 2 => 15)

Så går jeg næsten ud fra, at sort() kan klare sorteringen for en, MEN! Hvordan sørger jeg så for at $array_two bliver omorganiseret på samme måde?

I eksemplet skal post 0 og 1 byttes i $array_one - men da de to arrays følges ad, skal det også ske i $array_two!

Hvordan gør jeg det? Hjælp et meget meget træt hovede med at få denne sidste lille nød knækket!
Avatar billede martin-gert Nybegynder
12. marts 2009 - 09:56 #1
Var åbentbart bare træt og ikke dum. Har selv udarbejdet svaret:

function sort_b_from_a($a,$b) {
  $order_marker = array(); //Orienteringsarray
  asort($a); //Laver sortering med indexer bibeholdt
  $i = 0;
  foreach ($a as $key => $val) {

      $order_marker[$i] = $key; //laver array med den nye korrekte rækkefølge af værdier
      $i++;
  }
  $b_c = $b; //Laver kopi af array_two så værdier kan rettes uden runtime-datatab

  for ($i = 0; $i < sizeof($a); $i++) {
      $b[$i] = $b_c[$order_marker[$i]]; //Nye værdier for array_two tilføjes ud fra kopien
  }

  return $b; //sender ny værdi for b tilbage
}

Folk må naturligvis gerne bruge det ;-)
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
Kurser inden for grundlæggende programmering

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