3v4l.org

run code in 300+ PHP versions simultaneously
<?php $array = [ [ 'name' => 'Event A', 'date' => '2023-02-31' ], [ 'name' => 'Event A', 'date' => '2023-03-01' ], [ 'name' => 'Event B', 'date' => '2023-03-02' ], [ 'name' => 'Event C', 'date' => '2023-03-03' ], [ 'name' => 'Event D', 'date' => '2023-04-07' ], [ 'name' => 'Event E', 'date' => '2023-04-08' ], [ 'name' => 'Event E', 'date' => '2023-04-09' ], [ 'name' => 'Event E', 'date' => '2023-04-19' ], [ 'name' => 'Event E', 'date' => '2023-04-20' ], [ 'name' => 'Event E', 'date' => '2023-04-24' ], ]; $result = []; $last = []; foreach ($array as ['date' => $date]) { sscanf($date, '%d-%d-%d', $y, $m, $d); $key = $y . $m; // group by year-month if (isset($last[$key])) { $lastPadded = sprintf('%02s', $last[$key]); $thisPadded = sprintf('%02s', $d); if (($d - 1) === $last[$key]) { $result[$key] = preg_replace("~-$lastPadded\b|\b$lastPadded\b\K~", "-$thisPadded", $result[$key]); // hyphenate } else { $result[$key] = preg_replace("~\b$lastPadded\b\K~", ", $thisPadded", $result[$key], 1); // comma-separate } } else { $result[$key] = sprintf('%02s / %02s / %d', $d, $m, $y); // push initial string for year-month } $last[$key] = $d; } echo implode(", ", $result);
Output for git.master, git.master_jit, rfc.property-hooks
31 / 02 / 2023, 01-03 / 03 / 2023, 07-09, 19-20, 24 / 04 / 2023

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
27.52 ms | 405 KiB | 5 Q