2016-07-29 14 views
1

Ich habe eine Liste der Spielzeiten, also sagen 1:05 PM, 2:05 PM, 7:10 PM, 10:15 PM usw. Ich verwende ein mehrdimensionales Array und strcmp mit usort, um diese Spiele zu sortieren die richtige Reihenfolge von frühestens bis spät.usort in PHP falsche Ergebnisse

Die Spiele werden sortiert, aber jedes Spiel, das um 22:00 Uhr beginnt, wird vor einem der anderen Spiele aufgeführt. So sieht meine aktuelle Art wie folgt aus:

Dodgers 7/29/16 10:05 PM 
Angels 7/29/16 10:10 PM 
A's 7/29/16 10:15 PM 
Cubs 7/29/16 2:20 PM 
Jays 7/29/16 7:05PM 
Rays 7/29/16 7:15PM 
Astros 7/29/16 8:05 PM 

etc

Ihave dies nun seit Tagen zur Fehlerbehebung. Ich habe versucht, meine Datumszeichenkette unter Verwendung strtotime() umzuwandeln, aber usort mag dieses überhaupt nicht und meine Sorte wird zufällig. Ich habe versucht, das Datum/die Zeit mit Bindestrichen anstelle von Schrägstrichen zu formatieren, aber nichts ändert sich. Ich habe meine Datum/Uhrzeit-Zeichenfolge für zusätzliche Zeichen "geschrubbt". Hier ist mein Code:

$array[$timedate] = $string; 

// Multidimensional array of 'games' 
$games[] = array('date' => $timedate, 
       'title' => $string); 

// compare the dates and times 
function cmp($a, $b) 
{ 
    return strcmp($a['date'], $b['date']); 
} 

// Sort the array 
usort($games, "cmp"); 

Antwort

2

Usort möchte benutzerdefinierte Vergleichsfunktion definieren. Du brauchst das nicht. Verwenden Sie clasic sort in strtotime().

Oder Sie können ksort verwenden, wie Sie unten erwähnten. Hier ist der Code, der funktioniert:

$game_times = array(array("Dodgers", "7/29/16 10:05 PM"), 
        array("Angels", "7/29/16 10:10 PM"), 
        array("A's", "7/29/16 10:15 PM"), 
        array("Cubs", "7/29/16 2:20 PM"), 
        array("Jays", "7/29/16 7:05PM"), 
        array("Rays", "7/29/16 7:15PM"), 
        array("Astros", "7/29/16 8:05 PM")); 

foreach ($game_times as $item) 
{ 
    $games[strtotime($item[1])] = array('date' => $item[1], 
             'title' => $item[0]); 
} 

ksort($games); 

var_dump($games); 
+0

Ich versuchte Art() zu verwenden und es warf einen Fehler, aber es hat mir denken, dass usort die falsche Sortiermethode war. Also erkannte ich, dass ksort (das nach dem Schlüssel eines mehrdimensionalen Arrays sortiert) den Trick machen würde, und das tat es auch. Danke, dass du meinen Fokus änderst. – xar86413

+0

Gute Idee mit Ksort. Ich habe es in meiner Antwort ein wenig ausgearbeitet. –

0
// Multidimensional array of 'games'                                         
    $games[] = array('date' => $timedate,        
        'title' => $string);         

    // Sort the array 
    ksort($games);