prueba con esto
Código PHP:
do
{
$valor = $citas[array_rand($citas)]
}while(empty($valor));
Si los va a usar en arrays grandes la posibilidad de que caiga en el ultimo es muy pequeña, por lo que la posibilidad de que hagas array_rand 2 veces es muy baja.
Tambien puedes hacer
Código PHP:
array_slice($citas, 0, -1);
$valor = $citas[array_rand($citas)];
De todas formas si te interesa tanto la velocidad y las complejidades deberias saber que es mas rapido
usar mt_rand que array_rand
Código PHP:
$i = mt_rand[0, count($citas)-2];
$valor = $citas[$i];
creo que array_rand puede ser mas lento que usar count y mt_rand juntos
Saludos
Edit: No he visto el ultimo mensaje de deet, hemos escrito el mismo codigo.