= 6 && mb_strlen($b) >= 6) { $distance = levenshtein($a, $b); if ($distance === 1) { return 0.9; } if ($distance === 2) { return 0.8; } } // No relevant match return 0.0; } /** * Normalize a keyword to ensure stable comparison. */ private static function normalize(string $value): string { $value = mb_strtolower(trim($value)); // Remove non-alphanumeric characters $value = preg_replace('/[^\p{L}\p{N}]/u', '', $value) ?? ''; // Normalize German umlauts $map = [ 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', ]; return strtr($value, $map); } }