Avatar billede fixxxer Nybegynder
21. september 2005 - 16:56 Der er 25 kommentarer og
1 løsning

sorterings funktion

Som forlængelse af spm http://www.eksperten.dk/spm/648259

Jeg vil bruge kommandoen usort() til at sortere en talrække i et array for mig.

Arrayet kan kun indeholde nedenstående tal:

1, 2, 4, 8, 16, 32, 64


Et eksempel for indholdet af arrayet kunne være:

1, 16, 32, 64


Jeg skal nu bruge en funktion der kan sortere disse værdier i en rækkefølge således at hvis et tal står "alene" i talrækken (herover 1), så skal det flyttes til sidst i arrayet.

Ovenstående array skal derfor efter sortering se sådan ud:

16, 32, 64, 1


Er der haj der har en idé til hvordan jeg kan gøre det?
Avatar billede jakobdo Ekspert
21. september 2005 - 17:02 #1
Jeg skal lige se om jeg har for stået det rigtigt!
F.eks.:
1, 2, 16, 64 bliver til: 16, 64, 1, 2
Og hvorfor denne måde om jeg må spørge?
Avatar billede barklund Nybegynder
21. september 2005 - 17:03 #2
Hvordan står et tal 'alene'? Hvad med rækken 1,8,16,64 - så er 8 og 16 i rækkefølge og 1 og 64 er alene - hvordan skal det så sorteres? Og hvad hvis der ikke er nogen i rækkefølge?
Avatar billede coderdk Praktikant
21. september 2005 - 17:11 #3
Jeg forstår det heller ikke helt, men ville 1,2,16,64 ikke være uændret?
Avatar billede jakobdo Ekspert
21. september 2005 - 17:14 #4
Jeg forstod det som om tallene 1,2,4,8 er alenetal! (altså kun 1 tegn)
Men måske der er som barklund/coderdk, at den står alene fordi den ikke er i rækkefølgen: 1,2 osv...
Avatar billede fixxxer Nybegynder
21. september 2005 - 17:17 #5
Det er korrekt det barklund og coderdk har forstået..

coderdk >> lige præcis, for hvert tal er en repræsentant for en uge dag, og så er målet at vise en korrekt rækkefølge på disse ugedage..

barklund >> en sådan "ureglmæssighed" behøver ikke at blive sortet, for der vil så være tale om så individuelle dage, så det ikke kan svare sig at vise et mønster.
Avatar billede jakobdo Ekspert
21. september 2005 - 17:21 #6
Men hvad f.eks. med et mønster som dette: (1,2,4,16,32)
Hvordan skal det sorteres?
Avatar billede fixxxer Nybegynder
21. september 2005 - 17:25 #7
Jeg har selv svært ved at holde styr på de her ting, så jeg prøver lige at uddybe..

1, 2, 16, 64 skal blive til 16, 64, 1, 2

1,8,16,64 skal ikke sorteres da der er tale om meget individuelt valgte ugedage



Umiddelbart ser jeg dette for mig...

Talrækken vendes på hovedet, så de højeste tal står først.

1, 16, 32, 64 => 64, 32, 16, 1


Med en sorteringsfunktion konstatere vi at 1 * 2 = 2, hvilket er mindre end talet før, nemlig 16.
Derfor smides det op først i arrayet..

Derfor ville 1, 8, 16, 32, 64 til 8, 16, 32, 64, da kun 1 * 2 er mindre end det næste tal i talrækken.
Avatar billede fixxxer Nybegynder
21. september 2005 - 17:27 #8
jakobdo >> som udgangspunkt vil jeg holde på at tallet 64 skal være en del af arrayet før der er logik i at flytte talene rundt..

man-tirs-ons-fre-lør ville ikke give sønderligt meget mening som fre-lør-man-tirs-ons, selv om det godt kunne gøres sådan :)
Avatar billede barklund Nybegynder
21. september 2005 - 17:32 #9
Hey, sidste kommentar gjorde udslaget for mig! Altså, hvis man har X ugedage, så skal de opstilles i en fortløbende rækkefølge, hvis en sådan findes?
Avatar billede coderdk Praktikant
21. september 2005 - 17:32 #10
Hvorfor ikke bare bruge 0-6 eller 1-7? Og hvorfor skal lave om på rækkefølgen af ugedage? I dine eksempler bliver der jo fre, lør, søn, man, tir?
Efter den matematiske logik skal 1,2,4,16,32 ikke røres.
1, 2, 16, 64 skal vel heller ikke røres, og blive til 16, 64, 1, 2, da der jo er to sammenhængene - Eller mener du at hvis der er to eller flere talrækker der ikke hører sammen skal de alligevel flyttes?
heheh det er sq da forvirrende :D
Avatar billede jakobdo Ekspert
21. september 2005 - 17:34 #11
Jeg må give coderdk ret, det er lidt svært at se det store sammenhæng! :o)
Hvad hvis vi siger at der er 1,2,16,32
Så er 1,2 et par og 16,32 et par!
Hvilket par skal stå først, og hvilket til sidst?
Avatar billede fixxxer Nybegynder
21. september 2005 - 17:37 #12
barklund >> jep, lige præcis

coderdk >> jeg bruger noget bitwise udregning på tallene, og så er tallene 1-7 ikke meget brugbare længere..

Som jeg skrev, så skal der egenlig kun pilles hvis 64 (søndag) er en del af arrayet, for det er den eneste logiske dag en uge krydser henover.. med mindret at det er et opskørt array som 1, 8, 64 (man, tors, søn)
Avatar billede fixxxer Nybegynder
21. september 2005 - 17:38 #13
For god ordens skyld er her lidt source, hvis man føler lyst til at prøve nogle terorier af:


<?
    function cmp($a, $b)
    {
        $sort = ($a < $b)?1:-1;
        return $sort;
    }

    $days = array(1=>'Mandag', 2=>'Tirsdag', 4=>'Onsdag', 8=>'Torsdag', 16=>'Fredag', 32=>'Lørdag', 64=>'Søndag');
   
    $day_sum =  array_sum($_POST['weekdays']);
    $weekdays = array();
   
    foreach ($days as $value => $name)
    {
        if (($day_sum & $value) == $value)
            $weekdays[$value] = $value;
    }
   
    $weekdays = array_reverse($weekdays, true);
   
    uksort($weekdays, "cmp");
   
    echo implode(' - ', $weekdays);

?>
<form id="frm" action="<?=''?>" method="post" name="form">
    <select name="weekdays[]" size="15" multiple>
        <?
            foreach ($days as $value => $name)
            {
                echo '<option value="'.$value.'">'.$name.'</option>';
            }
        ?>
    </select><input type="submit" name="Send">
</form>
Avatar billede barklund Nybegynder
21. september 2005 - 17:44 #14
Altså, du vil have den til at kunne skrive:

Mandag
Onsdag-torsdag
Søndag-onsdag
Tirsdag, torsdag og lørdag

Men ikke

Mandag og torsdag-lørdag

Da sidstnævnte er for bøvlet - det skal i stedet bare være:

Mandag, torsdag, fredag og lørdag

Har jeg forstået det korrekt?
Avatar billede fixxxer Nybegynder
21. september 2005 - 17:55 #15
barklund >> den er lige i skabet, det er præcis det jeg vil opnå! :)
Avatar billede barklund Nybegynder
21. september 2005 - 18:07 #16
Eksempler et teh bomb - så havde folk nok forstået det lidt tidligere :)

Well, jeg kigger måske på det, men har ikke lige et hurtigt bud desværre. Måske nogle andre lige har en top-nudge ide i ærmet.
Avatar billede fixxxer Nybegynder
21. september 2005 - 18:11 #17
Ok, jeg havde heller ikke forestillet mig at den sådan lige kunne løses, men alle forslag der kan føre til en løsning er yderst velkomne :)
Avatar billede coderdk Praktikant
21. september 2005 - 18:54 #18
Jeg er stadig lidt forvirret, hvordan ved du at søn-ons, fre ikke er man-ons, fre, og søn? Altså sidste og kommende uge hvis du ved hvad jeg mener ;P
Avatar billede barklund Nybegynder
21. september 2005 - 19:36 #19
søn-ons,fre er "blot" man,tir,ons,fre,søn - det er kun hvis samtlige ugedage er i forlængelse, at vi laver rækken af dem. :)
Avatar billede coderdk Praktikant
21. september 2005 - 22:55 #20
heheh ok, så havde jeg ikke fattet det ;)
Avatar billede coderdk Praktikant
21. september 2005 - 23:27 #21
Jeg forstår stadig ikke det med at sortere og smide noget bagved i arrayet - Hvis målet bare var at finde ud af om talrækken var ubrudt?! :-D
Avatar billede coderdk Praktikant
21. september 2005 - 23:28 #22
Jeg ville synes at dette virkede mere logisk: http://coder.dk/dayrange.php :)
Avatar billede jakobdo Ekspert
21. september 2005 - 23:37 #23
Det er sgu smukt kodet det der coderDK! :o)
Avatar billede coderdk Praktikant
22. september 2005 - 00:03 #24
heheh tak jakob :) jeg ved ikke hvad jeg selv skal synes - jeg har bare på fornemmelsen at det kan gøre smartere, men hvordan er jeg for træt til at regne ud :-D
Avatar billede fixxxer Nybegynder
02. december 2005 - 06:53 #25
coderdk >> dit sidste bud vil jeg gerne give point for, smid et svar :)
Avatar billede coderdk Praktikant
02. december 2005 - 11:07 #26
hehe bare i orden :)
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