Avatar billede soltveit Nybegynder
25. marts 2002 - 22:59 Der er 17 kommentarer og
1 løsning

array_multisort

jeg har et multiarray:
$file_array[] = array( f_name=>$filename,
                      f_type=>$filetype,
                      f_size=>$filesize,
                      f_lastmod=>$lastmod
                      );
først vil jeg sortere efter "f_type", og derefter "f_name". Hvordan gør jeg det. Er det noget med funktionen array_multisort?
Avatar billede cms Nybegynder
25. marts 2002 - 23:11 #1
Jeg tror ikke du kan bruge array_multisort til dette. Men du kan i hvert fald bruge usort: (www.php.net/usort)

function cmpr ($a, $b, $c) {
    if ($a[$c] == $b[$c]) return 0;
    return ($a[$c] > $b[$c]) ? -1 : 1;
}

function cmp ($a, $b) {
  $r = cmpr($a, $b, 'f_type');
  if ($r!=0) return $r;
  $r = cmpr($a, $b, 'f_name');
  return $r;
}

usort ($file_array, "cmp");
Avatar billede jakoba Nybegynder
25. marts 2002 - 23:15 #2
nej, det er funktionen  usort()  du skal bruge, og så lave din egen sammenlignings funktion:

function cmp ($a, $b) { 
    if ( $a['f_type'] == $b['f_type'] ) {
        if ( $a['f_name'] == $b['f_name'] )
            return 0; // di er ens.
        return ( $a['f_name'] > $b['f_name'] ) ? -1 : 1;
    }
    return ( $a['f_type'] > $b['f_type'] ) ? -1 : 1;
}


usort( $file_array, "cmp" );

mvh JakobA
Avatar billede cms Nybegynder
25. marts 2002 - 23:18 #3
:-)
Avatar billede jakoba Nybegynder
25. marts 2002 - 23:25 #4
Ja. jeg er alt for langsom ( men jeg lærer en masse, og det er jo rart at se at den jeg fandt i manualen osse var den rigtige :-))

mvh JakobA
Avatar billede soltveit Nybegynder
25. marts 2002 - 23:31 #5
kommer fx "M" før "m"
Avatar billede jakoba Nybegynder
25. marts 2002 - 23:37 #6
Uha. nu snakker du om leksikografisk sortering af tekst. der er ca en million regler der
fx skal  "st. Peter"  placeres somom der stod "sankt Peter", og der er bunker af andre undtagleser man skal tage højde for.

Jeg mener den generelle regel er at det er ligemeget med store og små bogstaver, de tæller ens.

mvh JakobA
Avatar billede soltveit Nybegynder
25. marts 2002 - 23:51 #7
hvis jeg vil have mine mapper til at stå øverst efter alfabetisk orden, og bare derefter sortere filerne efter f_name eller f_size eller f_lastmod hvordan vil funktionen så se ud
Avatar billede soltveit Nybegynder
25. marts 2002 - 23:53 #8
hvis det er en mappe vil f_type = "Filmappe", jeg vil gerne give 50 point ekstra for denne funktion
Avatar billede cms Nybegynder
25. marts 2002 - 23:57 #9
function cmpr ($a, $b) {
    if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1;
}

function cmfiletype($a, $b){
return ($a=='Filmappe')?0:1;
}

function cmp ($a, $b) {
  $r = cmpr(cmfiletype($a['f_type']), cmfiletype($b['f_type']));
  if ($r!=0) return $r;
  $r = cmpr($a['f_name'], $b['f_name']);
  return $r;
}

usort ($file_array, "cmp");
Avatar billede soltveit Nybegynder
26. marts 2002 - 00:12 #10
jeg rettede ">" til "<" for at få mapper øverst, men ændre jeg "f_name" til "f_size" bliver mapper også sorteret efter størrelse. desuden fjernede jeg $b i cmfiletype, da der ellers opstod en fejl: missing argument 2 ...
Avatar billede cms Nybegynder
26. marts 2002 - 00:25 #11
hrm.. ja sådan er det når det går lidt hurtigt :)
Avatar billede cms Nybegynder
26. marts 2002 - 00:33 #12
Jeg forstår ikke helt problemet med størrelsen, du nævner sidst. Hvis du ændrer f_name til f_size er det vel netop for at sortere efter størrelse ?!
Avatar billede soltveit Nybegynder
26. marts 2002 - 00:51 #13
Ja, men filer eller af typen "ikke" "Filmappe". Mapper skal altid stå øverts i alfabetisk rækkefølge. lidt ligesom i windows når man browser rundt der.
Avatar billede cms Nybegynder
26. marts 2002 - 01:00 #14
Jeg har lavet et eksempel her:
http://e.dyndns.dk:888/Exp/Bib/
Hvad mangler der?
Avatar billede cms Nybegynder
26. marts 2002 - 01:23 #15
netop opdateret. Nu kan man sortere som i Windows.
Avatar billede soltveit Nybegynder
26. marts 2002 - 01:41 #16
ja, det virker sku fint, du får de 100 point. Findes der en funktionen der kan slette en mappe og dennes indhold?
Avatar billede soltveit Nybegynder
26. marts 2002 - 01:41 #17
her
Avatar billede cms Nybegynder
26. marts 2002 - 02:09 #18
Takker for points :-)

Følgende er hentet fra: http://www.php.net/manual/en/function.rmdir.php

function delete($file) {
  if (file_exists($file)) {
    chmod($file,0777);
    if (is_dir($file)) {
      $handle = opendir($file);
      while($filename = readdir($handle)) {
        if ($filename != "." && $filename !=
"..") {
          delete($file."/".$filename);
        }
      }
      closedir($handle);
      rmdir($file);
    } else {
      unlink($file);
    }
  }
}

delete ($mydir);
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