2011-08-26 5 views
15

J'ai un tableau associatif en PHP et je veux en sélectionner une paire clé/valeur aléatoire. Voici ce que j'ai jusqu'à présent:Sélection d'un élément aléatoire dans un tableau associatif PHP

Initialiser.

$locations = array(); 

boucle dans une requête SQL et AJOUTE paires de clés/val:

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

Plus tard, je sélectionner un index aléatoire du tableau:

$rand = array_rand($locations); 

Rand est juste un nombre . Donc, les emplacements [$ rand] me donnent quelque chose comme:

'1' => 'Location 1' 

OK, un élément assoc array. À ce stade, je ne sais pas la clé de ce tableau assoc, donc j'ai essayé les choses suivantes:

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)]; 

Aucune de ces travaux 3 tentatives. Ils lancent tous des erreurs comme "La variable passée n'est pas un tableau".

Je suis sûr qu'il y a un simple 1 revêtement qui peut extraire une paire clé/valeur aléatoire de la matrice. Ou ma syntaxe est désactivée. J'apprécierais vraiment l'aide.

Répondre

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

Votre problème se trouve dans 'array_push ($ locations," '$ location_id' => '$ location_name' ") ". Faites ceci à la place: '$ locations [$ location_id] = $ location_name;'. Alors 'array_rand ($ location)' retournera un '$ location_id' aléatoire; et vous pouvez obtenir le nom avec '$ name = $ locations [$ location_id]'. – arnaud576875

+0

vous avez tous raison, bien sûr - je viens de choisir celui-ci, je travaille mieux avec un exemple de code. et oui, je suis assez gêné par le fait que le push ne soit pas correct. Je code une tonne en perl (w hashes) donc j'aurais dû savoir mieux! JE VOUS REMERCIE! – Jeff

+0

sympa, tu as sauvé ma journée – RezaSh

1

votre pression est erroné

$locations[$location_id] = $location_name; 

il devrait être

donc, il n'y a rien sur la sélection aléatoire élément dans votre question.
toujours déboguer votre code, juste pour voir si vous avez des données appropriées avant de l'utiliser

4

array_rand() renvoie une clé du tableau, pas une valeur. Vous pouvez simplement utiliser:

$location_name = $locations[$rand]; 

Pour obtenir le nom de l'emplacement.


Voici un exemple complet: http://codepad.org/zR2YdMGN

suffit de cliquer soumettre quelques fois, vous verrez le travail aléatoire.

+0

Cela ne donne toujours pas la clé. –

+0

@M_rk La clé est dans '$ rand' – Paulpro

+0

Ok, désolé. Alors la réclamation ('$ rand' est juste un nombre) du PO est fausse. Et j'étais assez stupide pour ne pas vérifier cette affirmation. –