Te refieres a while($j<$i)
allí.
Recuerda, incrementaste $i después el último inserto. Esto significa que $i será mayor que la clave máxima de $dish.
Algunos pensamientos:
Cada vez que esté probando la igualdad con nulo, debería considerar usar is_null
(o !is_null). Es más preciso.
esto:
$dish[$i]=$row['dishes'];
$i++;
Sería mejor como:
// obviously instead of $i you would use count($dish) later (or use foreach)
$dish[]=$row['dishes'];
Ese bucle while final sería mejor como foreach:
foreach($dish as $val)
{
echo $val;
}