PHP field-level input validation errors

PHP
<?php
function validate(array $input, array $rules): array
{
    $errors = [];
    foreach ($rules as $field => $checks) {
        $value = $input[$field] ?? null;
        foreach ($checks as $rule) {
            if ($rule === 'required' && ($value === null || $value === '')) {
                $errors[$field] = 'is required';
                break;
            }
            if ($rule === 'email' && $value !== null && !filter_var($value, FILTER_VALIDATE_EMAIL)) {
                $errors[$field] = 'must be a valid email';
            }
            if ($rule === 'int' && $value !== null && filter_var($value, FILTER_VALIDATE_INT) === false) {
                $errors[$field] = 'must be an integer';
            }
        }
    }
    return $errors;
}