PHPize Online / SQLize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
Copy Clear
Copy Format Clear
<?php $source = Array ( '0' => Array ( 'name' => 'User_1', 'start' => '2020-10-01', 'end' => '2020-10-02', ), '1' => Array ( 'name' => 'User_1', 'start' => '2020-10-02', 'end' => '2021-10-03' ), '2' => Array ( 'name' => 'User_1', 'start' => '2020-10-07', 'end' => '2020-10-08', ), '3' => Array ( 'name' => 'User_1', 'start' => '2020-10-08', 'end' => '2020-10-09', ), '4' => Array ( 'name' => 'User_2', 'start' => '2020-04-04', 'end' => '2020-04-05', ), '5' => Array ( 'name' => 'User_2', 'start' => '2020-04-05', 'end' => '2020-04-06', ), '6' => Array ( 'name' => 'User_2', 'start' => '2020-04-12', 'end' => '2020-04-13', ), '7' => Array ( 'name' => 'User_2', 'start' => '2020-05-01', 'end' => '2020-05-02', ) ); // sort array by user and date usort( $source, function($a, $b){ return (($a['name']<=>$b['name']) == 0) ? $a['start']<=>$b['start'] : $a['name']<=>$b['name']; } ); // print_r($source); $res = array_reduce( $source, function($res, $el) { if (isset($res[$el['name']])) { $last = end($res[$el['name']); if ($el['start'] <= $last['end']) { $last['end'] = $el['end']; } else { $res[$el['name']][] = $el; } } else { $res[$el['name']][] = $el; } }, [] ); print_r($res);
Show:  
Copy Clear