/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
sort()
Fra : Janus


Dato : 15-03-07 13:20

Jeg har nogle filnavne i $filer som jeg sorterer i alfabetisk
rækkefølge:

sort($filer);

Det virker fint.

De bliver udskrevet som:

altmuligt.asp
index.php
test.txt
underligt.asp
vandkamp.mp3

Det er rigtigt nok.

Men nu vil jeg hellere have dem sorteret i filtype-rækkefølge og det
kan jeg ikke finde ud af.

De skal så istedet stå listet som:

altmuligt.asp
underligt.asp
vandkamp.mp3
index.php
test.txt

Det virker ikke at skrive:
sort(substr($filer,-3));

Jeg vil gerne, at de bliver bliver sorteret efter filtype først og så
alfabetisk.

Gode ideer?
--
Janus


 
 
Michael Zedeler (15-03-2007)
Kommentar
Fra : Michael Zedeler


Dato : 15-03-07 13:42

Janus skrev:
> De skal så istedet stå listet som:
>
> altmuligt.asp
> underligt.asp
> vandkamp.mp3
> index.php
> test.txt
>
> Det virker ikke at skrive:
> sort(substr($filer,-3));
>
> Jeg vil gerne, at de bliver bliver sorteret efter filtype først og så
> alfabetisk.

Det kan du med usort. Se manualen.
   
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Janus (15-03-2007)
Kommentar
Fra : Janus


Dato : 15-03-07 21:55

On 15 Mar., 13:42, Michael Zedeler <mich...@zedeler.dk> wrote:
> Det kan du med usort. Se manualen.

Nu har jeg kigget og læst og kigget igen. Jeg fatter simpelthen ikke
meget af det.

Jeg viser lige hvad jeg gør i en forsimplet udgave:

<?
unset($filer);
$dirname = "./";
$dirhandle = opendir($dirname);
while($file = readdir($dirhandle))
{
if (is_file($dirname.$file))
{
$filer[]=$file;
}
}

// Det er vel her, at jeg skal finde
// ud af at sortere efter filendelser.

sort($filer);
foreach($filer as $file)
{
echo $file;
echo "</br>";
}
?>


Hvad skal jeg gøre for at få det til at lykkes?
--
Janus


Martin Mouritzen (15-03-2007)
Kommentar
Fra : Martin Mouritzen


Dato : 15-03-07 22:43

On 15 Mar 2007 13:54:51 -0700, "Janus" <newsgroup@hjerteknuser.dk>
wrote:

>Nu har jeg kigget og læst og kigget igen. Jeg fatter simpelthen ikke
>meget af det.

Usort er en sorteringsfunktion som tager navnet på din egen funktion
som argument.

I den funktion får du 2 parametre som skal sammenlignes (lad os kalde
dem A & B), hvis A er større end B returnerer du 1, hvis de er det
samme returnerer du 0, hvis B er større end A returnerer du -1. Så
sørger PHP for resten.

Der findes allerede en funktion i PHP som sammenligner 2 strenge og
returnerer om den ene er "større" (alfabetisk) end den anden, og
returnerer henholdsvis -1,0 og 1, så det eneste du mangler for at
bruge den er at hive filendelsen ud og kontrollere.

Jeg ville f.eks. gøre ca. sådan her:

function sortByExtension($a,$b) {
$extensiona = substr($a,strrpos($a,".") + 1,strlen($a));
$extensionb = substr($b,strrpos($b,".") + 1,strlen($b));

return strcasecmp($extensiona,$extensionb);
}
usort($filer,"sortByExtension");
--
Med venlig hilsen,
Martin Mouritzen.
http://www.siteloom.dk

Michael Zedeler (15-03-2007)
Kommentar
Fra : Michael Zedeler


Dato : 15-03-07 22:50

Janus skrev:
> On 15 Mar., 13:42, Michael Zedeler <mich...@zedeler.dk> wrote:
>> Det kan du med usort. Se manualen.
>
> Nu har jeg kigget og læst og kigget igen. Jeg fatter simpelthen ikke
> meget af det.

Indledningsvis kan jeg jo se at du ikke bruegr usort. Så er du jo på vej
i en anden retning. usort skal blot fodres med en funktion som bruges
til at sammenligne to strenge, så sorteringsalgoritmen (usort) kan finde
ud af at placere dem korrekt.

Du skal altså skrive sådan en funktion og fodre usort med den. Se
eksemplet i manualen. Her er noget pseudokode:

function filename_cmp(fulde_navn1, fulde_navn2) {
navn1 = fulde_navn1 uden endelsen;
navn2 = fulde_navn2 uden endelsen;
endelse1 = endelsen på fulde_navn1;
endelse2 = endelsen på fulde_navn2;

resultat = strcmp( endelse1, endelse2 );

if( resultat == 0 ) {
   resultat = strcmp( navn1, navn2 )
}

return resultat
}

Jeg ville dele de fulde navne op i navn og endelse med regulære udtryk,
men der er mange andre måder at gøre det på.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Janus (16-03-2007)
Kommentar
Fra : Janus


Dato : 16-03-07 09:58


Okay..

Men hvordan præcis får jeg den tilpasset til mit script?
--
Janus


Martin Mouritzen (16-03-2007)
Kommentar
Fra : Martin Mouritzen


Dato : 16-03-07 11:55

On 16 Mar 2007 01:58:17 -0700, "Janus" <newsgroup@hjerteknuser.dk>
wrote:

>Men hvordan præcis får jeg den tilpasset til mit script?

Jamen...

Jeg har lavet den præcis så den passer til dit script, bare sæt
kodestykket ind i stedet for der hvor du kalder "sort" nu.
--
Med venlig hilsen,
Martin Mouritzen.
http://www.siteloom.dk

Janus (16-03-2007)
Kommentar
Fra : Janus


Dato : 16-03-07 13:17

On 16 Mar., 11:54, Martin Mouritzen <mar...@siteloom.dk> wrote:

> Jeg har lavet den præcis så den passer til dit script, bare sæt
> kodestykket ind i stedet for der hvor du kalder "sort" nu.


Ahh.. Selvfølgelig.

Jeg havde stirret mig blind på det andet, så jeg slet ikke havde set
henvisningen til $filer.

Nu virker det.
Takfortippetduerbarealletiderstak.

--
Janus


Janus (16-03-2007)
Kommentar
Fra : Janus


Dato : 16-03-07 15:02

On 16 Mar., 13:17, "Janus" <newsgr...@hjerteknuser.dk> wrote:
> Nu virker det.

Det er ved at blive pinligt det her, men jeg kom i tanker om, at jeg
jo ikke får dem listet i filnavne OG SÅ alfabetisk orden.

Ens filer skal jo også stå i alfabetisk rækkefølge..

--
Janus


Martin Mouritzen (16-03-2007)
Kommentar
Fra : Martin Mouritzen


Dato : 16-03-07 18:37

On 16 Mar 2007 07:02:26 -0700, "Janus" <newsgroup@hjerteknuser.dk>
wrote:

>Det er ved at blive pinligt det her, men jeg kom i tanker om, at jeg
>jo ikke får dem listet i filnavne OG SÅ alfabetisk orden.
>
>Ens filer skal jo også stå i alfabetisk rækkefølge..

Det havde Michael Ziedler løst for dig.

function sortByExtension($a,$b) {
$extensiona = substr($a,strrpos($a,".") + 1,strlen($a));
$extensionb = substr($b,strrpos($b,".") + 1,strlen($b));

$resultat = strcasecmp($extensiona,$extensionb);

if ($resultat == 0) {
$resultat = strcasecmp($a,$b);
}
return $resultat;
}
usort($filer,"sortByExtension");
--
Med venlig hilsen,
Martin Mouritzen.
http://www.siteloom.dk

Martin Mouritzen (16-03-2007)
Kommentar
Fra : Martin Mouritzen


Dato : 16-03-07 18:37

On Fri, 16 Mar 2007 18:36:49 +0100, Martin Mouritzen
<martin@siteloom.dk> wrote:

>Det havde Michael Ziedler løst for dig.

Zedeler endda
--
Med venlig hilsen,
Martin Mouritzen.
http://www.siteloom.dk

Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408514
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste