Avatar billede mrfunder Nybegynder
24. december 2008 - 04:06 Der er 8 kommentarer og
2 løsninger

Sortering af array via key

Kære Eksperter.

Jeg har et array med keys indeholdende tiden (PHP's time()- funktion), hvor et produkt var på tilbud samt dets produkt kategori. Jeg ønsker således at sortere det sådan at flg. produkter med tid idag, bliver listet under idag, og dernæst under deres respektive datoer.

Jeg ønsker så at sortere det således jeg ville få noget lign. en givende opstilling:

I dag:
TV
Radio

23-12-08:
DVD

21-12-08
Radio


Array
(
    [1230083123] => TV
    [1230084772] => Radio
    [1230081772] => Radio
    [1230084772] => DVD
)


Hvordan gøres dette? På forhånd tusind tak! Og god jul :- )
Avatar billede erikjacobsen Ekspert
24. december 2008 - 08:46 #1
Det ser ikke sundt ud. Du har to nøgler med samme værdi, 1230084772. Det kan man ikke.
Avatar billede hypofysen Nybegynder
24. december 2008 - 08:51 #2
men bortset fra det:
måske noget i stil med

$arr = array
(
1210083123 => TV,
1230094772 => DVD,
1230084772 => DVD,
);

foreach($arr as $dato => $type){
    echo(date('d-m-Y',$dato))."<br />";
    echo $type."<br /><br />";
    };
Avatar billede hypofysen Nybegynder
24. december 2008 - 09:12 #3
Glemte det skulle sorteres efter dato, men dette skulle virke:

$arr = array
(
1210083123 => TV,
1290094772 => DVD,
1230084772 => DVD,
1260084772 => RADIO,
);

ksort($arr);
foreach($arr as $dato => $type){
  echo(date('d-m-Y',$dato))."<br />".$type."<br/><br />";
  };
Avatar billede mrfunder Nybegynder
24. december 2008 - 12:12 #4
erikjacobsen - et eksempel skrevet i de sene natte timer, normalvist ville mine keys aldrig være identiske :)
Avatar billede mrfunder Nybegynder
24. december 2008 - 12:32 #5
Hej Hypofysen.

Det virker umiddelbart fint, det giver mig resultatet:

24-12-2008
Radio

24-12-2008
DVD

09-10-2008
TV

Men problemet ligger i gruperingerne.
Er der flere produkter under samme dag, må de gerne ligge under hinanden.
Avatar billede mrfunder Nybegynder
24. december 2008 - 12:32 #6
Altså sådan det ville blive grupperet således:

24-12-2008
Radio
DVD

09-10-2008
TV

- Hvordan gøres dette?
Avatar billede tjens Nybegynder
24. december 2008 - 13:10 #7
Så skriver du kun datoen ud, når den ændrer sig:

$arr = array
(
1210083123 => TV,
1290094772 => DVD,
1260084771 => DVD,
1260084772 => RADIO,
);

ksort($arr);
$gammelOverskrift = '';
foreach($arr as $dato => $type){
    $nyOverskrift = date('d-m-Y',$dato);
    if ($nyOverskrift != $gammelOverskrift) {
        echo("<br />".$nyOverskrift."<br />");
        $gammelOverskrift = $nyOverskrift ;
    }
    echo($type."<br/>");
  }
Avatar billede mrfunder Nybegynder
24. december 2008 - 14:02 #8
tusind tak begge to :) gider i smide et svar?
Avatar billede hypofysen Nybegynder
25. december 2008 - 10:35 #9
det var så lidt :) go jul
Avatar billede tjens Nybegynder
25. december 2008 - 11:33 #10
svar
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