sehen, ob dies für Sie arbeitet. Es basiert auf einer anderen Antwort, die ich hier gegeben habe. Sie durchlaufen die Tage und sammeln jeden Tag, der den gleichen Preis wie zuvor in einem Array hat. Jedes Mal, wenn die Schleife eine Preisänderung feststellt, wird ein neues Array erstellt und so weiter.
<?php
$values[] = ["2017-09-01", "158.00"];
$values[] = ["2017-09-02", "158.00"];
$values[] = ["2017-09-03", "158.00"];
$values[] = ["2017-09-04", "158.00"];
$values[] = ["2017-09-10", "175.00"];
$values[] = ["2017-09-11", "175.00"];
$values[] = ["2017-10-20", "158.00"];
$values[] = ["2017-10-21", "158.00"];
$values[] = ["2017-10-22", "159.00"];
$values[] = ["2017-10-23", "152.00"];
$values[] = ["2017-10-24", "152.00"];
$ult = null;
$currentRange = [];
$ranges = [];
foreach ($values as $fecha) {
$day = $fecha[0];
$price = $fecha[1];
if ($ult === null) {
$currentRange = [
"price" => $price,
"days" => [$day]
];
}
else {
if ($price === $ult) {
$currentRange["days"][] = $day;
}
else {
$ranges[] = $currentRange;
$currentRange = [
"price" => $price,
"days" => [$day]
];
}
}
$ult = $price;
}
$ranges[] = $currentRange;
$rangesString = [];
foreach ($ranges as $range) {
$str = $range["days"][0];
if (count($range["days"]) > 1) {
$str .= " - ".$range["days"][count($range["days"]) - 1];
}
$str .= ": ".$range["price"];
$rangesString[] = $str;
}
echo (implode("<br>", $rangesString));
/* results:
2017-09-01 - 2017-09-04: 158.00
2017-09-10 - 2017-09-11: 175.00
2017-10-20 - 2017-10-21: 158.00
2017-10-22: 159.00
2017-10-23 - 2017-10-24: 152.00
*/
Demo
Dies ist eine schwierige Frage, weil Sie ein neues Paar Tage, das nächste Mal der Preis wieder auf 158 wollen; Im OP gibt es also drei Ergebnisse, obwohl es nur 2 Preise gibt. Was denkst du über das Parsen der Ergebnisse in PHP? – BeetleJuice
Eigentlich habe ich viel mehr mit gleichem Preis, auch mit verschiedenen Jahren. Es ist nur für den Ausdruck der Preise für die verschiedenen Zeiträume, kann im selben Jahr wiederholt werden und darf nicht. – Helenp