Esatto, ma dato che l'output dell'utente sembra essere una semplificazione, se ne deduce che non sia detto che debba semplicemente stampare "ciao".
Fatto come dici tu obbliga la riscrittura (quindi la duplicazione) delle istruzioni che vorrebbe siano fatte se NON si trova nel punto scelto.
La mia no 
Semplifichiamo e facciamo finta che le istruzioni da eseguire sempre siano 5 echo (in realtà potrebbero essere ben più complesse ma cambia poco a livello logico)
Codice PHP:
$pos = 5;
for ($i = 1; $i <= 10; $i++) {
if ($i == $pos) {
echo "Ciao
"; // Questo va fatto SOLO se siamo nella posizione 5
echo "{$i}
"; // Tutti questi echo vanno fatti SEMPRE
echo "{$i}
"; // ma sono pure duplicazioni di quando NON siamo
echo "{$i}
"; // nella posizione 5 e quindi
echo "{$i}
"; // ci troviamo con n righe duplicate inutili
echo "{$i}
";
} else {
echo "{$i}
"; // Questi echo sono quelli da fare in NON match
echo "{$i}
";
echo "{$i}
";
echo "{$i}
";
echo "{$i}
";
}
}
La mia invece
Codice PHP:
$done = false;
$pos = 5;
for ($x = 1; $x <= 10; $x++) {
if ($x == $pos and ! $done) {
echo "Ciao
";
$done = true;
$x = $pos - 1;
} else {
echo "{$x}
";
echo "{$x}
";
echo "{$x}
";
echo "{$x}
";
echo "{$x}
";
}
}
Con notevole risparmio di codice e soprattutto meno punti di errore.
Se invece ciò che deve fare, con le relative conseguenze sulle elaborazioni successive, sono ininfluenti, allora potrebbe essere meglio la logica di webmaster, ma dipende tutto da che conseguenze (logiche e procedurali) provoca il "fuori ciclo".
La mia soluzione tiene conto di questa possibilità, dividendo di fatto le due condizioni (match e !match) permettendo l'esecuzione SOLO di quello che effettivamente serve NELLA condizione attuale.