Попробовал составить бенчмарк для сравнения текущего... эм... сравнения с предложенными методиками.
Данные - тысяча строк по тысяче символов. По сравнению с исходными данными в строках 2 заменены на 1, чтобы было более бинарно, но это все равно строки. Каждая строка сравнивается с каждой, кроме себя, итого почти миллион итераций.
Старый код, который в вопросе, крутил эти данные
10,3 секунды.
Новый код -
0,5 секунды:
$h = gmp_hamdist(
$firstGmp, // gmp_init первой строки вынесен за цикл
gmp_init($other, 2)
);
$sum = $zeroes[$n1] + $zeroes[$n2]; // подсчитанные до цикла количества 0 в строках
$percent = round(($sum - $h) * 100 / ($sum + $h));
if ($percent >= 95) { ...
Результаты идентичны. Собственно, только две строки из этой тысячи совпали на 96%, остальные - менее.
Проверка, можно ли исключить из сравнения строки по общему количеству нулей, показала, что отсеивается менее 3%. Такие данные, да...
Благодарю поучаствовавших в дискуссии и отдельно
Stalker_RED - за практически готовое решение, причем "малой кровью".