1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| <?php
$data = array(
'ob1' => array(
array('date' => '2455925.5', 'ra' => 18.562723816667),
array('date' => '2455925.5833333', 'ra' => 18.568874305556),
array('date' => '2455925.6666667', 'ra' => 18.575024322222),
array('date' => '2455925.75', 'ra' => 18.581173863889)
),
'obj2' => array(
array('date' => '2455925.5', 'ra' => 17.0694258),
array('date' => '2455925.5833333', 'ra' => 17.077027372222),
array('date' => '2455925.6666667', 'ra' => 17.084644177778),
array('date' => '2455925.75', 'ra' => 17.092276088889)
),
'obj3' => array(
array('date' => '2455925.5', 'ra' => 20.946099566667),
array('date' => '2455925.5833333', 'ra' => 20.953030933333),
array('date' => '2455925.6666667', 'ra' => 20.959959494444),
array('date' => '2455925.75', 'ra' => 20.96688525)
)
);
$events = array();
// genération des combinaisons possibles
// entre tous les objets présents
$objects = array_keys($data);
foreach($objects as $key => $obj) {
$couples[$obj] = array_slice($objects, $key + 1);
}
array_pop($couples); // retrait du dernier élément sans objets partenaires
// lecture des données des objets correspondants aux seconds membres des couples
$readCouples = function($obj, $row, $date, $ra1) use (&$data, &$couples) {
foreach($couples[$obj] as $otherObject) {
$ra2 = $data[$otherObject][$row]['ra'];
$delta = abs($ra1 - $ra2);
$event = eventName($delta);
if (false !== $event) {
// ici pour chaque couple tu vas avoir un évènement ou pas
$manageEvents($event, $date);
}
}
};
$manageEvents = function($event, $date) use (&$events) {
// ici tu parcours ton tableau des évènements et tu les classes date_start/date_end...
};
// POINT D'ENTREE PRINCIPAL DE LA ROUTINE
// parcours des combinaisons et gestion des évènements
foreach($data as $obj => &$details) {
$nb = count($details);
foreach($details as $row => $values) {
$date = $values['date'];
$ra1 = $values['ra'];
$readCouples($obj, $row, $date, $ra1);
}
}
function eventName($delta) {
if ($delta < 0.5) {
return 'conj';
}
else
if (($delta > 5) && ($delta < 6)) {
return 'opp';
}
else {
return 'false';
}
}
?> |