Avatar billede MoodyJerup Novice
17. juli 2013 - 16:21 Der er 6 kommentarer og
1 løsning

Sortering af multi-array

Hej,

jeg er igang med at skulle sortere et array efter data fra en ical fil. Dette ér blevet parset ind i et array, men jeg har en udfordring med at få startdatoerne sorteret.

Arrayen-strengen ser sådan her ud:
$ical_elm["VEVENT"][$j]["DTSTART"] -> dette giver datoen.

Men hvordan sorterer jeg ud fra DTSTART i dette multidimensionelle-array, så nyeste dato starter øverst?

/Sam
Avatar billede michael_stim Ekspert
17. juli 2013 - 16:30 #1
Avatar billede MoodyJerup Novice
17. juli 2013 - 16:31 #2
Har kigget på det, men min IQ er under 3, så jeg skriver herinde for at få hjælp i varmen ;-)
Avatar billede MoodyJerup Novice
17. juli 2013 - 16:34 #3
Array {
    [VEVENT] => Array
        (
            [0] => Array
                (
                    [DTSTART] => 1373472000
                    [DTEND] => 1373475600
                    [DTSTAMP] => 1374064399
                    [UID] => D42A17A1-45E5-4344-B6A5-FFB3536C2146
                    [CREATED] => 47174400
                    [LAST-MODIFIED] => 47210400
                    [SEQUENCE] => 4
                    [STATUS] => CONFIRMED
                    [SUMMARY] => Test
                    [TRANSP] => OPAQUE
                )

Jeg skal sortere VEEVENT EFTER DTSTART ...

Hjælp!
Avatar billede MadsHaupt Juniormester
17. juli 2013 - 18:52 #4
Kode:

function getboo($year1, $month1, $day1, $hours1, $minutes1, $seconds1, $year2, $month2, $day2, $hours2, $minutes2, $seconds2) {
    if ($year1 == $year2 && $month1 == $month2 && $day1 == $day2 && $hours1 == $hours2 && $minutes1 == $minutes2 && $seconds1 == $seconds2) {
        return true;
    }
    else {
        if ($year1 > $year2) {
            return true;
        }
        elseif($year1 == $year2) {
            if ($month1 > $month2) {
                return true;
            }
            elseif($month1 == $month2) {
                if ($day1 > $day2) {
                    return true;
                }
                elseif($day1 == $day2) {
                    if ($hours1 > $hours2) {
                        return true;
                    }
                    elseif($hours1 == $hours2) {
                        if ($minutes1 > $minutes2) {
                            return true;
                        }
                        elseif($minutes1 == $minutes2) {
                            if ($seconds1 >= $seconds2) {
                                return true;
                            }
                            else {
                                return false;
                            }
                        }
                        else {
                            return false;
                        }
                    }
                    else {
                        return false;
                    }
                }
                else {
                    return false;
                }
            }
            else {
                return false;
            }
        }
        else {
            return false;
        }
    }
}

function sorting(array $array) {
    $objlist = array();
    $datelist = array();
    for ($i = 0; $i < sizeof($array); $i++) {
        $index = sizeof($objlist);
        for ($j = 0; $j < sizeof($objlist); $j++) {
            if (getboo(/* datelist[$j] year */, /* datelist[$j] month */, /* datelist[$j] day */, /* datelist[$j] hours */, /* datelist[$j] minutes */, /* datelist[$j] seconds */, /* objlist[$i] year */, /* objlist[$i] month */, /* objlist[$i] day */, /* objlist[$i] hours */, /* objlist[$i] minutes */, /* objlist[$i] seconds */)) {
                $index = $j;
                break;
            }
        }
        array_splice($objlist, $index, 0, $array[$i]);
    }
    return $objlist;
}
Avatar billede arne_v Ekspert
22. juli 2013 - 03:57 #5
Hvad er forskellen paa:


function getboo($year1, $month1, $day1, $hours1, $minutes1, $seconds1, $year2, $month2, $day2, $hours2, $minutes2, $seconds2) {
    if ($year1 == $year2 && $month1 == $month2 && $day1 == $day2 && $hours1 == $hours2 && $minutes1 == $minutes2 && $seconds1 == $seconds2) {
        return true;
    }
    else {
        if ($year1 > $year2) {
            return true;
        }
        elseif($year1 == $year2) {
            if ($month1 > $month2) {
                return true;
            }
            elseif($month1 == $month2) {
                if ($day1 > $day2) {
                    return true;
                }
                elseif($day1 == $day2) {
                    if ($hours1 > $hours2) {
                        return true;
                    }
                    elseif($hours1 == $hours2) {
                        if ($minutes1 > $minutes2) {
                            return true;
                        }
                        elseif($minutes1 == $minutes2) {
                            if ($seconds1 >= $seconds2) {
                                return true;
                            }
                            else {
                                return false;
                            }
                        }
                        else {
                            return false;
                        }
                    }
                    else {
                        return false;
                    }
                }
                else {
                    return false;
                }
            }
            else {
                return false;
            }
        }
        else {
            return false;
        }
    }
}


og:


function getboo($year1, $month1, $day1, $hours1, $minutes1, $seconds1, $year2, $month2, $day2, $hours2, $minutes2, $seconds2) {
    return mktime($hours1, $minutes1, $seconds1, $month1, $day1, $year1) >= mktime($hours2, $minutes2, $seconds2, $month2, $day2, $year2);
}


?
Avatar billede arne_v Ekspert
22. juli 2013 - 03:59 #6
Og hvorfor ikke bruge den indbyggede usort?
Avatar billede MadsHaupt Juniormester
22. juli 2013 - 14:01 #7
Det er fordi jeg ikke viste at der var en indbygede funktion.
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

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