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
| $data = [
["id" => 125, "pseudo" => "tartanpion", "date_debut" => "2021-12-03", "date_fin" => "2021-12-15"],
["id" => 126, "pseudo" => "tartanpion", "date_debut" => "2021-12-16", "date_fin" => "2021-12-20"],
["id" => 127, "pseudo" => "gilette12", "date_debut" => "2021-12-03", "date_fin" => "2021-12-15"],
["id" => 128, "pseudo" => "grillepain", "date_debut" => "2021-12-03", "date_fin" => "2021-12-15"],
["id" => 129, "pseudo" => "tartanpion", "date_debut" => "2022-01-03", "date_fin" => "2022-01-05"],
];
// Trier, c'est bien
usort($data, fn ($a, $b) => $a['date_debut'] <=> $b['date_debut']);
$result = [];
foreach ($data as $data_item) {
// Calcul du jour précédent la date_debut de l'élément courant
// Pour voir si ça colle
$previous_day = date('Y-m-d', strtotime("{$data_item['date_debut']} - 1 day"));
$added = false; // Drapeau indiquant si l'insertion dans $result a été effectuée
foreach ($result as $i => $result_item) { // Parmi les items du résultat, on vérifie si...
if ($result_item['pseudo'] === $data_item['pseudo']) { // ... le pseudo correspond...
if ($result_item['date_fin'] === $previous_day) { // ... et que la date début - 1 jour de l'élément en traitement est égale à la date de fin d'un élément déjà inséré précédemment ...
$result[$i]['date_fin'] = $data_item['date_fin']; // ... si oui on fusionne
$added = true; // On flague le traitement
break; // Et on sort de la boucle
}
}
}
if ($added === false) { // Si pas d'ajout/fusion...
$result[] = $data_item; // ... on ajoute
}
}
print_r($result); |
Partager