2017-10-14 5 views
1

Je comprends que ce code est de trier les activités du tableau au plus tard au moment du démarrage et aussi d'afficher quelle activité qui viennent en premier dans la boucle qui ont la même date.Tri résultat similaire dans usort en PHP

foreach ($activity_array AS $k => $v): 
...... 

usort($v['activity'], function ($a, $b) { 
$ad = new DateTime($a['start']); 
$bd = new DateTime($b['start']); 
if ($ad == $bd) { 
return 0; 
} 
return $ad < $bd ? -1 : 1; 
}); 

Comment puis-je trier si l'heure de départ est le même, mais a une autre variable de lieu qui devait être une sorte au sein de la même activité.

| Activity | Start   | Venue | 
+------------+----------------+-----------+ 
| Activity A | 22/10/17 08.30 | Floor 1 | 
| Activity D | 22/10/17 10.30 | Hall 3 | 
| Activity B | 22/10/17 10.30 | Hall 1 | 
| Activity C | 22/10/17 10.30 | Hall 2 | 
| Activity X | 22/10/17 09.30 | Floor 2 | 

à être comme:

| Activity | Start   | Venue | 
+------------+----------------+-----------+ 
| Activity A | 22/10/17 08.30 | Floor 1 | 
| Activity X | 22/10/17 09.30 | Floor 2 | 
| Activity B | 22/10/17 10.30 | Hall 1 | 
| Activity C | 22/10/17 10.30 | Hall 2 | 
| Activity D | 22/10/17 10.30 | Hall 3 | 
+0

question est bon + 1 –

Répondre

1

Vous pouvez vérifier à nouveau pour le lieu lorsque le temps de départ est le même

foreach ($activity_array AS $k => $v): 
...... 

usort($v['activity'], function ($a, $b) { 
$ad = new DateTime($a['start']); 
$bd = new DateTime($b['start']); 
if ($ad == $bd) { 

    $venue1 = $a['venue']; 
    $venue2 = $b['venue']; 
    return strcmp($venue1, $venue2); 
} 
return $ad < $bd ? -1 : 1; 
}); 
+0

'(venue1 $ - venue2 $). == Étage 1- Étage 2 »que je ne pense pas donner un résultat frieux –

+0

Oui, j'ai édité ma réponse @AlivetoDie –

+0

merci @ B.Desai, ne savait pas que la fonction existe. – abu

1

Voici votre solution ....

$array = array(
     array('activity' => 'Activity A', 'start' => '22/10/17 08.30', 'venue' => 'Floor 1'), 
     array('activity' => 'Activity D', 'start' => '22/10/17 10.30', 'venue' => 'Hall 3'), 
     array('activity' => 'Activity B', 'start' => '22/10/17 10.30', 'venue' => 'Hall 1'), 
     array('activity' => 'Activity C', 'start' => '22/10/17 10.30', 'venue' => 'Hall 2'), 
     array('activity' => 'Activity X', 'start' => '22/10/17 09.30', 'venue' => 'Floor 2') 
); //Your Array 
usort($array,"cmp"); 
function cmp($a, $b){ 
    if ($a["venue"] == $b["venue"]) { 
     return 0; 
    } 
    return ($a["venue"] < $b["venue"]) ? -1 : 1; 
} 

Résultat

Array 
(
[0] => Array 
    (
     [activity] => Activity A 
     [start] => 22/10/17 08.30 
     [venue] => Floor 1 
    ) 

[1] => Array 
    (
     [activity] => Activity X 
     [start] => 22/10/17 09.30 
     [venue] => Floor 2 
    ) 

[2] => Array 
    (
     [activity] => Activity B 
     [start] => 22/10/17 10.30 
     [venue] => Hall 1 
    ) 

[3] => Array 
    (
     [activity] => Activity C 
     [start] => 22/10/17 10.30 
     [venue] => Hall 2 
    ) 

[4] => Array 
    (
     [activity] => Activity D 
     [start] => 22/10/17 10.30 
     [venue] => Hall 3 
    ) 

) 

Duplicate