Странные какие-то у Вас функции. Проверку 3 чисел сделать немного красивее можно как-то так:
function win($num1, $num2, $num3) {
if ($num1 == $num2) {
return $num1 == $num3 ? 3 : 1;
}
return $num1 == $num3 || $num2 == $num3 ? 1 : 0;
}
Про то, что в функцию может залететь одно число - понятно чуть больше, чем ничерта. Что в этом случае нужно делать? Сравнивать цифры этого числа по такой же логике? Проще в таком случае сразу такое число разбить на три цифры и пихать в вашу функцию, чем делать одну функцию под все случаи жизни.