2011-08-26 10 views
15

Tengo una matriz asociativa en PHP y quiero seleccionar una combinación de clave/valor aleatoria. Esto es lo que tengo hasta ahora:Selección de un elemento aleatorio de una matriz asociativa de PHP

Initialize.

$locations = array(); 

bucle a través de una consulta SQL y añade pares clave/Val:

array_push($locations, "'$location_id' => '$location_name'"); 

Más tarde, seleccionar un índice aleatorio de la matriz:

$rand = array_rand($locations); 

Rand es sólo un número . Así ubicaciones [$ rand] me da algo así como:

'1' => 'Location 1' 

bien grande, un elemento de matriz Assoc. En este punto, no sé la clave de esta matriz asociativa, así que he intentado lo siguiente:

foreach($locations[$rand] as $loc_id => $location_name) { 
    echo "$key : $value<br/>\n"; 
} 

$loc_id, $location_name = each($locations[$rand]); 

$location_name = $locations[key($rand)]; 

Ninguno de estos 3 intentos trabajo. Todos arrojan errores como "La variable pasada no es una matriz".

Estoy seguro de que hay un simple liner 1 que puede arrancar un par aleatorio de clave/valor de la matriz. O mi sintaxis está desactivada. Realmente apreciaría la ayuda.

Respuesta

26
$array = array('a' => 1, 'b' => 2); 
$key = array_rand($array); 
$value = $array[$key]; 
+0

Su problema está en 'array_push ($ locations," '$ location_id' => '$ location_name' ") ; '. Haga esto en su lugar: '$ locations [$ location_id] = $ location_name;'. Entonces 'array_rand ($ location)' devolverá un '' location_id' al azar; y puede obtener el nombre con '$ name = $ locations [$ location_id]'. – arnaud576875

+0

está todo correcto, por supuesto, acabo de elegir este aC. Trabajo mejor con código de ejemplo. y sí, estoy bastante avergonzado de que el impulso no sea correcto. codifico una tonelada en perl (w hashes) ¡así que debería haberlo sabido mejor! ¡GRACIAS! – Jeff

+0

bueno, me salvaste el día – RezaSh

1

su empuje está mal

$locations[$location_id] = $location_name; 

debe ser

es así, no hay nada sobre la selección de elemento aleatorio en su pregunta.
siempre depure su código, solo para ver si tiene los datos adecuados antes de usarlo

4

array_rand() devuelve una clave de la matriz, no un valor. Simplemente puede usar:

$location_name = $locations[$rand]; 

Para obtener el nombre de la ubicación.


Aquí hay un ejemplo completo: http://codepad.org/zR2YdMGN

Simplemente haga clic en enviar un par de veces, verá el trabajo al azar.

+0

Aún no aparece la clave. –

+0

@M_rk La clave está en '$ rand' – Paulpro

+0

Ok, lo siento. Entonces el reclamo ('$ rand' es solo un número) del OP es incorrecto. Y fui tan tonto como para no verificar este reclamo. –

Cuestiones relacionadas