PHP Peaks
function peaks(array $a): int
{
    $n = count($a);
    if ($n <= 2) {
        return 0;
    }
    $sum  = array_fill(0, $n, 0);
    $last = -1;
    $dist = 0;
    for ($i = 1; $i + 1 < $n; ++$i) {
        $sum[$i] = $sum[$i - 1];
        if (($a[$i] > $a[$i - 1]) && ($a[$i] > $a[$i + 1])) {
            $dist = max($dist, $i - $last);
            $last = $i;
            ++$sum[$i];
        }

    }
    if (($sum[$n - 1] = $sum[$n - 2]) === 0) {
        return 0;
    }
    $dist = max($dist, $n - $last);
    for ($i = ($dist >> 1) + 1; $i < $dist; ++$i) {
        if ($n % $i === 0) {
            $last = 0;
            for ($j = $i; $j <= $n; $j += $i) {
                if ($sum[$j - 1] <= $last) {
                    break;
                }
                $last = $sum[$j - 1];
            }
            if ($j > $n) {
                return $n / $i;
            }
        }
    }
    for ($last = $dist; $n % $last;) {
        ++$last;
    }

    return (int)($n / $last);
}

This finds the peak positions, then tests how many equal blocks can each contain at least one peak.