$arr1 = [
[
"date" => "2019-05-17",
"value" => "1"
]
];
$arr2 = [
[
"date" => "2019-05-17",
"value" => "2"
], [
"date" => "2019-05-18",
"value" => "3"
]
];
$result = array_merge($arr1, array_udiff($arr2, $arr1, function ($a, $b) { return $a['date'] <=> $b['date']; }));
var_dump($result);
array(2) {
[0]=> array(2) {
["date"]=> string(10) "2019-05-17"
["value"]=> string(1) "1"
}
[1]=> array(2) {
["date"]=> string(10) "2019-05-18"
["value"]=> string(1) "3"
}
}
$req = $db->prepare(
"SELECT `date`, `date` - INTERVAL 1 DAY AS `prevDate`, `price`
FROM `prices`
WHERE `priductId` = :id
ORDER BY `date`"
);
$res = $req->execute(['id' => $id]);
$row1 = [];
while ($row2 = $req->fetch(PDO::FETCH_ASSOC)) {
if (count($row1)) {
echo $row1['date'] . ' - ' . $row2['prevDate'] . ' - ' . $row1['price'] . "\n";
}
$row1 = $row2;
}
if (count($row1)) {
echo $row1['date'] . ' - ' . date('Y-m-d') . ' - ' . $row1['price'] . "\n";
}
В эту таблицу заноситься цена, только в том случае, если цена за предыдущую дату отличается от текущей.
А если данные запрашиваются из базы, то можно сразу запросом получить нужную структуру, сформировав content через CONCAT и GROUP_CONCAT в JSON-формате.