Этот код сначала создает массив с неделей в качестве первого измерения и днем во втором, считая вхождения по мере прохождения через ваши исходные данные.
Затем, чтобы получить максимум, он просто проходит черезнедели и использует array_map()
и max()
, чтобы получить наибольшее значение за все дни ...
$data = [(object)["num_day" => 1, "num_week" => "2" ],
(object)["num_day" => 1, "num_week" => "2" ],
(object)["num_day" => 2, "num_week" => "2" ],
(object)["num_day" => 4, "num_week" => "2" ],
(object)["num_day" => 4, "num_week" => "2" ],
(object)["num_day" => 4, "num_week" => "2" ],
(object)["num_day" => 4, "num_week" => "3" ],
(object)["num_day" => 4, "num_week" => "3" ],
(object)["num_day" => 4, "num_week" => "4" ]
];
$count = [];
foreach ( $data as $date ) {
if ( !isset ($count[$date->num_week][$date->num_day])) {
$count[$date->num_week][$date->num_day] = 1;
}
else {
$count[$date->num_week][$date->num_day]++;
}
}
$final = array_map("max", $count);
print_r($final);
распечатывается с тестомданные ...
Array
(
[2] => 3
[3] => 2
[4] => 1
)