Bonjour,

Dans une boucle for, j'ai une condition if qui se base sur deux arguments liés par un "ou" :

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;
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 :

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 :

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!