Jeśli chcesz, aby kolejne instrukcje nadpisywały Ci wcześniejsze, to musisz pisać oddzielne if'y. Najwyraźniej źle zrozumiałeś ideę stosowania elseif. Konstrukcja, której użyłeś działa w następujący sposób:
Jeśli "wartość ze zmiennej i" jest podzielna przez cztery to wykonaj instrukcję pod spodem i wyjdź z if'a (instrukcji warunkowej) ..., itd..
Chodzi oto, że jeśli którykolwiek z warunków się wykona, (dalej) niżej nie schodzi interpreter, tylko wychodzi z if'a, kończy działanie tej instrukcji. Musiałbyś napisać coś takiego, żeby to poszło zgodnie z Twoją myślą:
for($i=1;$i<=50;$i++) {
if($i % 4 === 0) {
echo "1";
}
if($i % 10 === 0) {
echo "2";
}
if($i % 4 === 0 && $i % 10 === 0) {
echo "3";
}
}
function divider_division($number1, $divider1, $result1) {
return ($number1 % $divider1 === $result1) ? true : false;
}
for($i=1;$i<=50;$i++) {
if(divider_division($i, 4, 0)) {
echo "9";
}
if(divider_division($i, 10, 0)) {
echo "8";
}
if(divider_division($i, 4, 0) && divider_division($i, 10, 0)) {
echo "7";
}
}