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.