Yo el problema que le veo a sufle (esto es un plato, ¿verdad?) es que te desordena el array original, dejandolo "inservible" si lo necesitas en el formato original.
Y el array_rand() no es mas que coger los n primeros elementos del shuffle(array_keys($array)), pero supongo que optimizado en codigo C. Ademas, creo que no se puede poner como lo he puesto (sufle modifica el array, y como el array no esta en una variable, no podria acceder a ella). Seria mas bien:
Código PHP:
$claves=array_keys($array);
shuffle($claves);
$aleatorio=$array[$claves[0]];
// o si queremos mas aleatoriedad, podemos elegir el indice de $claves aleatoriamente
$id_clave=rand(0,count($claves));
$aleatorio_2=$array[$claves[$id_clave]];
Y ahora que miro el manual, le veo otro fallo a sufle:
Código PHP:
<?php
$fruits = Array(
"apples" => "juicy",
"lemons" => "sour",
"tangerines" => "sweet");
shuffle($fruits);
print_r($fruits);
?>
Mirad que le hace al pobre array asociativo
Asi que sabiendo los pros y los contras, es solo cuestion de elegir.
Saludos.
PD: Esto es lo que me gusta de la programacion. Preguntas por una solucion a 10 programadores y obtienes 93.45 soluciones totalmente validas.