2016-07-29 2 views
1

J'ai une liste de temps de jeu, donc disons 13:05, 14:05, 19:10, 10:15 PM etc. J'utilise un tableau multidimensionnel et strcmp avec usort pour trier ces jeux dans l'ordre correct du plus tôt au plus tard. Les jeux sont triés, mais tous les jeux qui commencent à 22h sont listés avant l'un des autres jeux. Donc, mon genre actuel ressemble à ceci:usort en PHP résultats incorrects

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 été dépanne pendant des jours maintenant. J'ai essayé de convertir ma chaîne de date en utilisant strtotime(), mais usort ne l'aime pas du tout et mon sort devient aléatoire. J'ai essayé de formater la date et l'heure en utilisant des tirets au lieu de barres obliques, mais rien ne change. J'ai également nettoyé ma chaîne de date/heure pour tous les caractères supplémentaires. Voici mon 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"); 

Répondre

2

Usort veut définir la fonction de comparaison définie par l'utilisateur. Tu n'as pas besoin de ça. Utilisez le tri clasic sur strtotime().

Ou vous pouvez utiliser ksort, comme vous l'avez mentionné ci-dessous. Voici le code qui fonctionne:

$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

J'ai essayé d'utiliser sort() et il a jeté une erreur, mais il m'a fait penser que usort était la mauvaise méthode de tri. J'ai donc réalisé que ksort (qui trie par clé d'un tableau multidimensionnel) ferait l'affaire, et c'est ce qu'il a fait. Merci d'avoir changé ma concentration. – xar86413

+0

Bonne idée avec ksort. Je l'ai un peu précisé dans ma réponse. –

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

    // Sort the array 
    ksort($games);