09. januar 2006 - 11:07Der er
13 kommentarer og 1 løsning
Sortering af flerdimentionelle arrays af class'es
Hej alle. Jeg har oprettet en class action der blandt andet indeholder værdierne 'sagID', 'actionID' og 'opret'. (opret har formatet ("YYYY-hh-mm HH-ii_ss"). Jeg har lavet et array $action som indeholder objekter af klassen action, og som har nøgleværdierne sagID og actionID. $action['sagID']['actionID']. Dette array ønsker jeg nu at sortere således at de objekter tilhørende $action['sagID'] sorteres efter opret. Et eksempel: $action[5][4]->opret = "2006-01-09 10:30:00" $action[5][3]->opret = "2006-01-09 10:45:00" $action[2][10]->opret = "2006-01-09 10:15:00" $action[2][12]->opret = "2006-01-09 10:20:00" Rækkefølgen af [sagID] er altså ligegyldig, og er allerede sorteret. Det er sorteringen af det indre array[actionID] som er problemet. Begrundelsen er at jeg skal aflæse disse arrays i rækkefølge ved brug af reset(), current() og next(). Kan nogle klare den? Hilsen Christian
Hej barklund. Det er netop alle disse typer 'sort'-funktioner jeg ikke helt forstår. Desuden kendte jeg heller ikke 'foreach()' Skal det forstås således at: 1) foreach($action as &$sager) gennemløber alle alle poster i et givent array (som jo i dette tilfælde er en serie af 'indre' arrays). 2) uasort udfører sortering på hver af de 'indre' arrays ved at sammenligne alle kombinationer af $a->opret,$b->opret og at man ikke behøver at skrive (...) når man kalder cmp_cases? 3) Vil det sige at når jeg (meget ofte) har udført rutinen
reset($et_array); for ($i=0;$i<count($et_array);$i++){ Forskellige handlinger på current($et_array); ... ... next($et_array); }
akkurat ligesågodt kunne have skrevet:
foreach($et_array as &$arr){ Forskellige handlinger på $arr; ... ... } ? Mvh Christian Ja - strtotime() - Jeg har lært det ved mange fejl!!!
at bruge & foran argumentet i foreach er blot for at få en reference til det array, som vi vil sortere - istedet for en kopi af det.
Og så var der også lige hvad? Min smiley?
Men derudover ja mht. foreach og uasort - og ja, du angiver blot cmp_cases som den funktion, der skal bruges til at sorteres med - du skal ikke kalde funktionen...
Nåe - nu forstår jeg. Noget i stil med: ________ ___ ( o o ) ___ __( )__|___ ___|_| |___ ||||| ( ) ||||| -- Ang reference - er array ikke altid i forvejen oprettet som en pointer til hukommelsen, så man kun behøver at bruge & når der er tale om almindelige variable (som foreksempel int og string)? Men iøvrigt - et godt SVARET - altså SVAR.
Så er $b en kopi af $a, og retter jeg $b, så er $a uændret. Sådan er det i hvert fald i PHP4 - bruger du PHP5, så kan du ignorere den del, hvor arrays overføres som referencer implicit :)
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.