Yo lo conseguí de esta forma:
Código PHP:
$v = array(1,1,3,5,5,7,7,9);
// Guardamos la longitud inicial de $v
$n = count($v);
for($i=0; $i<$n-1; $i++) {
$j=$i+1;
// Comprobamos que exista el índice $i, de lo contrario el bucle continúa
if (isset($v[$i])) {
while($j<$n) {
// Comprueba si el índice $j existe y es igual al índice $i
if(isset($v[$j]) && $v[$i]==$v[$j])
unset($v[$j]);
// De lo contrario saltamos al siguiente $j
else
$j++;
}
}
}
Lo que pasaba era que al entrar al bucle "for", la función "count($v)" devuelve un valor, y cada vez que entras al bucle "while" devuelve otro distinto porque vuelve a contar la variable, por lo que si has borrado un índice te devolverá un número menor al inicial.
Entonces, lo que hice fue guardar la longitud inicial de $v en $n y en cada bucle, tanto "for" como "while", comprobar que existe el índice en el que se encuentran para evitar errores.
Espero que te sirva.