false || true renvoit false
Bonjour,
Dans une boucle for, j'ai une condition if qui se base sur deux arguments liés par un "ou" :
Code:
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; |
Tout se passe correctement, sauf lorsque $i == 1 et $j == 2. Cela correspond aux date suivantes :
$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 :
Citation:
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 = //
EDIT :
Pour plus de clarté, voici de manière plus lisible, les données de ma boucle :
Citation:
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 =
Je n'y comprends rien. Quelqu'un aurait une idée?
Merci d'avance pour votre aide!