Вот как должна выглядеть логика c в вашей функции, она проста для понимания и охватывает все три случая. Имейте в виду, что вы всегда должны сначала проверять 0 и 1, а затем делать это индивидуально
if (strpos($source, '0') !== false && strpos($source, '1') !== false) {
return 0;
}
elseif (strpos($source, '0') !== false) {
return 1;
}
else {
return 2
}
Вы можете поставить еще один 'elseif' вместо последнего 'else', если вы можете получить результат, отличный от 3 результата, которые вы упомянули