Warum platzieren Sie den Monat nach dem Jahr nicht als Integer in einer separaten Arrayspalte? (Oder dies könnte in der Datenbank getan werden). So wie Jahre und Tage aufeinander folgen, können Sie die ganzzahligen Werte sortieren.
In SQL würde dies als so sein:
CREATE TABLE dateTable (`date` CHAR(6));
INSERT INTO dateTable VALUES ('4/1990'), ('3/1989'), ('5/1991');
SELECT `date` FROM dateTable; # Not sorted
SELECT `date`, CONCAT(MID(`date`, INSTR(`date`, '/') + 1, 4), LEFT(`date`, INSTR(`date`, '/') - 1)) sortDate FROM dateTable ORDER BY CONCAT(MID(`date`, INSTR(`date`, '/') + 1, 4), LEFT(`date`, INSTR(`date`, '/') - 1)); # Sorted
Und in PHP als so:
/* got this function from the following SO post: http://stackoverflow.com/questions/2699086/sort-multi-dimensional-array-by-value */
/* full credit to o0'. */
/* thanks! */
function aasort (&$array, $key) {
$sorter=array();
$ret=array();
reset($array);
foreach ($array as $ii => $va) {
$sorter[$ii]=$va[$key];
}
asort($sorter);
foreach ($sorter as $ii => $va) {
$ret[$ii]=$array[$ii];
}
$array=$ret;
}
$sql=mysql_fecth_array(mysql_query("SELECT * FROM table"));
for($i=1;$i<=3;$i++){
$arr['job_'.$i]=$sql['job_'.$i];
$arr['comp_'.$i]=$sql['comp_'.$i];
$arr['date_'.$i]=$sql['date_'.$i];
$slashPos = strpos($sql['date_'.$i], "/");
$arr['sortdate_'.$i]= (int)(substr($sql['date_'.$i], $slashPos + 1, 4) . substr($sql['date_'.$i], 1, $slashPos - 1));
}
aasort($arr, "sortdate")
Bitte beachte, dass ich nicht den PHP-Code versucht haben, und ich bin nicht sicher, warum Sie schreiben die Zeilennummer in Ihre Array-Schlüssel, aber dies sollte Sie in die Richtung einer möglichen Lösung weisen.
Lassen Sie mich wissen, wenn Sie etwas weiter benötigen.
James
'mysql_query' (und andere mit dem Präfix' mysql_') ist veraltet. Ändern Sie Ihre ursprüngliche Logik – RomanPerekhrest
Siehe Normalisierung. Aufzählungsspaltennamen sind oft symptomatisch für schlechtes Design. – Strawberry
Und Fecth ist kein Wort – Strawberry