Avatar billede nich01 Nybegynder
22. januar 2004 - 20:01 Der er 13 kommentarer og
1 løsning

Hvordan sorteres array's efter dato.

jeg har to array's som hver især er sorteret efter dato, men jeg skal udskrive indholdet af array'ene til skærmen således at indholdet af de to array's blandes, men sorteres efter feltet dato, hvordan gør jeg dette jeg kan sagtens udskrive det ene array efter den andet men så er de jo ikke samlede sorteret efter dato, nogen der kan hjælpe???
arayene indeholder følgende...
$row_msg[dato]
$row_msg[navn]
$row_msg[overskrift]
$row_body[dato]
$row_body[navn]
$row_body[overskrift]
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 20:07 #1
Avatar billede detox Nybegynder
22. januar 2004 - 21:37 #2
Jeg ved ikke hvordan man gør det med array_multisort(), men det kunne være rart med et eksempel.
Ellers kan du gøre sådan her:

$arr = array_merge_recursive($row_msg, $row_body);
asort($arr['dato']);
foreach($arr['dato'] as $key => $val) {
    $newarr['dato'][] = $val;
    $newarr['navn'][] = $arr['navn'][$key];
    $newarr['overskrift'][] = $arr['overskrift'][$key];
}
unset($arr);

Så ligger de sorteret efter dato i $newarr.
Avatar billede Slettet bruger
22. januar 2004 - 22:45 #3
Det lyder som om de kommer fra et databaseopslag. Du kan vel bare slå op i begge tabeller på en gang?
Avatar billede nich01 Nybegynder
22. januar 2004 - 23:00 #4
de to tabeller indeholder ikke det samme, den ene indeholder dato, navn og den anden indeholder dato, navn, overskrift...
Kan det lade sig gøre alligevel at slå op i to tabeller samtidiget??

detox-->>
kan jeg bruge dit svar selvom tabellerne ikke er ens, de ser således ud:
$row_msg[dato]
$row_msg[navn]
$row_body[dato]
$row_body[navn]
$row_body[overskrift]
Avatar billede Slettet bruger
22. januar 2004 - 23:10 #5
Nej, man kan kun lave en UNION på to opslag, der returnerer data af samme type, men måske kan vi fake den?

$result=mysql_query("(SELECT dato, navn, overskrift FROM tabel1) UNION (SELECT dato, navn, '' AS overskrift FROM tabel2) ORDER BY dato") or die(mysql_error());
while($row=mysql_fetch_assoc($result)){
  echo $row['dato'];
  echo $row['navn'];
  if (!empty($row['overskrift'])){echo $row['overskrift'];}
}
Avatar billede nich01 Nybegynder
22. januar 2004 - 23:45 #6
desværre melder den fejl:

You have an error in your SQL syntax near '(SELECT dato, navn, overskrift FROM forum_body) UNION (SELECT dato, navn, '' AS ' at line 1
Avatar billede detox Nybegynder
22. januar 2004 - 23:58 #7
Ja, du skulle kunne bruge det alligevel. Du kan evt. lave denne tilføjelse, for at undgå notices ved tomme index. Men der er jo så kun overskrifter på den ene halvdel:

$arr = array_merge_recursive($row_msg, $row_body);
asort($arr['dato']);
foreach($arr['dato'] as $key => $val) {
    $newarr['dato'][] = $val;
    $newarr['navn'][] = $arr['navn'][$key];
    $newarr['overskrift'][] = isset($arr['overskrift'][$key]) ? $arr['overskrift'][$key] : "";
}
unset($arr);
Avatar billede Slettet bruger
22. januar 2004 - 23:58 #8
Så prøver vi bare en anden metode. Jeg går ud fra, at der godt kan være mere end

$liste=array();
$result=mysql_query("SELECT dato, navn, overskrift FROM tabel1 ORDER BY dato") or die(mysql_error());
while($row=mysql_fetch_assoc($result)){
  $liste[$row['dato']][]=$row;
}
$result=mysql_query("SELECT dato, navn FROM tabel2 ORDER BY dato") or die(mysql_error());
while($row=mysql_fetch_assoc($result)){
  $liste[$row['dato']][]=$row;
}
foreach($liste as $dato){
  foreach($dato as $punkt){
    echo $punkt['dato'];
    echo $punkt['navn'];
    if(isset($punkt['overskrift'])){echo $punkt['overskrift'];}
  }
}
Avatar billede Slettet bruger
23. januar 2004 - 00:05 #9
Jeg kom til at sende for tidligt. Jeg var ved at skrive:

Jeg går ud fra, at der godt kan være mere end et sæt oplysninger for samme dato.
Avatar billede nich01 Nybegynder
23. januar 2004 - 00:22 #10
sandbox-->>>

det kører fint igennem og den printer det, men den printer først det ene array sorteret efter dato dernæst det andet sorteret, jeg ville gerne ha dem fælles sorteret.
Avatar billede detox Nybegynder
23. januar 2004 - 00:27 #11
Her er inkl. udskrivning:

$arr = array_merge_recursive($row_msg, $row_body);
asort($arr['dato']);
foreach($arr['dato'] as $key => $val) {
    $newarr['dato'][] = $val;
    $newarr['navn'][] = $arr['navn'][$key];
    $newarr['overskrift'][] = isset($arr['overskrift'][$key]) ? $arr['overskrift'][$key] : "";
}
unset($arr);
for ($i=0;$i<count($newarr['dato']);$i++) {
    echo $newarr['dato'][$i] . " - " . $newarr['navn'][$i] . "<br />";
    echo $newarr['overskrift'][$i] . "<br /><br />";
}
Avatar billede Slettet bruger
23. januar 2004 - 00:29 #12
Min kan rettes til med

ksort($liste);

Lige før den første foreach.

Hvis du hellere vil have dem i omvendt orden kan du sortere med krsort($liste);
Avatar billede Slettet bruger
23. januar 2004 - 00:30 #13
Datoerne er vel gemt i samme format?
Avatar billede nich01 Nybegynder
23. januar 2004 - 00:37 #14
yes det er de, det funkter super nu, takker for hjælpen.
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