$seen = [];
$i = 0;
foreach ($array as $data) {
$number = $data['number'];
$a = $data['values']['a'];
$b = $data['values']['b'];
if (isset($seen[$number])) {
$output[$seen[$number]]['values']['a'] += $a;
$output[$seen[$number]]['values']['b'] += $b;
} else {
$output[] = $data;
$seen[$number] = $i;
}
$i++;
}
checking result
print_r($output);
gives me this
Array ( [0] => Array ( [number] => 1 [values] => Array ( [a] => 1 [b] => 2 ) ) [1] => Array ( [number] => 2 [values] => Array ( [a] => 6 [b] => 6 ) ) [2] => Array ( [number] => 3 [values] => Array ( [a] => 2 [b] => 4 ) ) )