Hello liebe Leute,
ich suche einen Algorithmus der ein zweidimensionales array nach dem datum sortiert!
datum ist in dem Format: DD.MM.YYYY
liebe Grüße
Kathi
Hello liebe Leute,
ich suche einen Algorithmus der ein zweidimensionales array nach dem datum sortiert!
datum ist in dem Format: DD.MM.YYYY
liebe Grüße
Kathi
hmm ich schreib sowas immer um in
YYYYMMDD
dann
sort($datumdaten);
und wieder wandeln in DD.MM.YYYY
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Wenn es sich um Daten ab 1970 handelt, wäre auch die Unix Zeit eine Möglichkeit.
Ein Datum kannst Du mit dem U-Parameter in date() so formatieren. Siehe http://de.php.net/manual/de/function.date.php
das datum ist im format DD.MM.YYYY und sollte so auch beibehalten werden ich brauch einfach ein code gerüst welches das ganze ordnet!
lg kathi
Hallo
das datum ist im format DD.MM.YYYY und sollte so auch
beibehalten werden ich brauch einfach ein code gerüst welches
das ganze ordnet!
Du sprichst von „Zweidimensionalem Array“ und von
„Datum“. Was bedeutet das? Wie sehen denn die
Daten konkret aus?
Grüße
CMБ
das datum ist im format DD.MM.YYYY und sollte so auch
beibehalten werden ich brauch einfach ein code gerüst welches
das ganze ordnet!
<?php $daten = array(<br /> array('datum'=\>'01.01.2008','name'=\>'foo')
,array('datum'=\>'04.01.2008','name'=\>'barnie')
,array('datum'=\>'03.01.2008','name'=\>'fred')
,array('datum'=\>'02.01.2008','name'=\>'bar')
);
function mysort($a,$b)
{
$a1 = implode("",array\_reverse(explode(".",$a['datum'])));
$b1 = implode("",array\_reverse(explode(".",$b['datum'])));
if ($a1==$b1) { return 0; }
return ($a1
mysort nach belieben optimieren - fuehrende nullen bei tag und monat sind aber zwingend.
bsp:
[0] => Array
(
[id] => 2
[titel] => asdfasfd
[text] => asdfasdfafdasdfasdfasdf
[preis] => asdfasdf
[datum] => 12.12.1988
)
[1] => Array
(
[id] => 1
[titel] => asdfasdf
[text] => asdfasdfasdf
[preis] => asdfasdfasdf
[datum] => 11.12.1984
)
[2] => Array
(
[id] => 1
[titel] => afdasfd
[text] => asdfasdfa
[preis] => afassfdasdf
[datum] => 11.12.1987
)
[3] => Array
(
[id] => 3
[titel] => afdfdasdf
[text] => asfasfasdf
[preis] => asdfasdfasdf
[datum] => 10.02.2008
)
[4] => Array
(
[id] => 4
[titel] => asdfasdf
[text] => asfdasfd
[preis] => asfdasfdsadf
[datum] => 09.01.2008
)
ich glaub mit der funktion vom jörg funktioniert das sortieren eh einwandfrei!
danke schön
Hallo,
ich glaub mit der funktion vom jörg funktioniert das sortieren
eh einwandfrei!
Aha, da brauch ich ja gar nicht mehr antworten
Ich hab mal versucht (so wie in Perl), das Problem durch
eine sog. „Schwartzsche Transformation“ zu lösen.
(http://en.wikipedia.org/wiki/Schwartzian_transform)
Das bedeutet, eine „Dekoration“ des Datensatzes mit einer
„Eigenschaft“ zu erzeugen, der während des Vergleichens
(sort), einen Zugriff auf den Datensatz selbst unnötig macht.
Im o.g. Fall wird aus dem Datum einmal ein
Unix-Timestamp berechnet und dieser während der
Vergleiche verwendet. Nach dem Sortieren wird
diese „Dekoration“ weggezaubert. Leider unter-
strützt PHP keine Array-Rückgabe aus einem Sort,
so daß man das ganze nicht wie in Perl in nur
einem Ausdruck hinschreiben kann.
Außerdem ist die Syntax für die implizite Vergleichs-
funktionsformulierung häßlich. Na ja, wenn Deine
Daten in einem Array $unsorted = Array(…) stünden,
wäre das dann:
# fake Schwartzian Transform in PHP :wink:
# step 1) insert\_timestamp $d[0]=\>unix timestamp, $d[1]=\>array record
$sorted = array\_map(
create\_function('$d',
'return Array(strtotime(join("-",'
.'array\_reverse(split("/\./", '
.'$d[datum])))), $d);'
), $unsorted
);
# step 2) sort/compare\_timestamp
usort($sorted,
create\_function('$ta, $tb',
'return ($dt=$ta[0]-$tb[0]) ?'
.'($dt
Die drei integrierten Funktionen würden (werden nicht explizit
verwendet) ausgeschrieben so aussehen (wen's interessiert):
/\*
function insert\_timestamp($d) {
return Array(strtotime(join('-', array\_reverse(split('/\./', $d[datum])))), $d);
}
function compare\_timestamp($ta, $tb) {
return ($dt=$ta[0]-$tb[0]) ? ($dt
Na ja, in Perl würde das richtig schön aussehen :wink:
Grüße
CMБ
hey na cool! wieder was dazu gelernt!
danke für deine mühe und an alle anderen auch ein danke schön!
es läuft jetzt alles wie ich es will! gott sei dank gg!
lg kathi