Bonjour,
Dans une boucle for, j'ai une condition if qui se base sur deux arguments liés par un "ou" :
Tout se passe correctement, sauf lorsque $i == 1 et $j == 2. Cela correspond aux date suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 $limit = $periods->count() - 1; $txt = $limit; for ($i = 1; $i <= $limit; $i++) { for ($j = 0; $j <= $limit; $j++) { if ($i !== $j) { if (! ($periods[$i]->getStart() > $periods[$j]->getEnd() && $periods[$i]->getEnd() > $periods[$j]->getEnd()) || ($periods[$i]->getStart() < $periods[$j]->getStart() && $periods[$i]->getEnd() < $periods[$j]->getStart()) ) { $overlap = true; } else { $overlap = false; } $txt = $txt . " i = " . $i . " et j = " . $j . " et overlap = " . $overlap . "//\n"; } } } echo $txt;
$i : start = "2019-01-23" et end = "2019-01-25"
$j : start = "2019-01-26" et end = "2019-02-03"
Donc, selon moi, dans mon if, la première condition retourne false et la seconde true. Comme elle sont séparées par un "ou", ça devrait retourner true, donc $overlap devrait être affecté avec false. Or, voici ce que j'obtiens dans l'echo que je fais :
EDIT :2 i = 1 et j = 0 et overlap = // i = 1 et j = 2 et overlap = 1// i = 2 et j = 0 et overlap = // i = 2 et j = 1 et overlap = //
Pour plus de clarté, voici de manière plus lisible, les données de ma boucle :
Je n'y comprends rien. Quelqu'un aurait une idée?i = 1 et j = 0,
start1 = 2019-01-23 00:00:00,
end1 = 2019-01-25 00:00:00,
start0 = 2019-01-20 00:00:00,
end0 = 2019-01-22 00:00:00
overlap =
i = 1 et j = 2
start1 = 2019-01-23 00:00:00
end1 = 2019-01-25 00:00:00
start2 = 2019-01-26 00:00:00
end2 = 2019-02-03 00:00:00
overlap = 1
i = 2 et j = 0
start2 = 2019-01-26 00:00:00
end2 = 2019-02-03 00:00:00
start0 = 2019-01-20 00:00:00
end0 = 2019-01-22 00:00:00
overlap =
i = 2 et j = 1
start2 = 2019-01-26 00:00:00
end2 = 2019-02-03 00:00:00
start1 = 2019-01-23 00:00:00
end1 = 2019-01-25 00:00:00
overlap =
Merci d'avance pour votre aide!
Partager