J'ai un tableau d'objets dans PHP. J'ai besoin de sélectionner 8 d'entre eux au hasard. Ma pensée initiale était d'utiliser Je sais que je pourrais utiliser array_rand (array_flip ($ my_array), 8) code> mais cela ne fonctionne pas, car les objets ne peuvent pas agir comme des clés pour un tableau. P>
shuffle code>, mais je suis inquiet pour la performance que la matrice pousse en taille. Est-ce le meilleur moyen, ou y a-t-il une manière plus efficace? P>
6 Réponses :
Vous pouvez utiliser array_rand code> pour choisir les touches de manière aléatoire et un foreach code> pour recueillir les objets:
Parce qu'il renvoie les clés de tableau, pas les valeurs?
@Chris, c'est pourquoi vous utilisez $ my_array [$ clé] code>.
@Chris b.: J'ai reformé ma réponse. :)
Aucun point pour tirer trop tôt la gâchette, puis corriger votre réponse après le fait. Le crédit va au gars qui a eu raison la première fois.
Qu'en est-il ?:
$count = count($my_array);
for ($i = 0; $i < 8; $i++) {
$x = rand(0, $count);
$my_array[$x];
}
$result = array();
foreach( array_rand($my_array, 8) as $k ) {
$result[] = $my_array[$k];
}
$array = array(); shuffle($array); // randomize order of array items $newArray = array_slice($array, 0, 8); Notice that shuffle() function gives parameter as a reference and makes the changes on it.
Boucle libre. C'est une belle solution.
@Chords Vous pouvez parier que shuffle code> et array_slice code> contient un peu de boucle. :)
Touche, mais au moins je n'ai pas à regarder!
Épique! Merci
Je viens de trouver cela dans notre code et j'espérais trouver une solution plus lisible:
Vous pouvez obtenir plusieurs éléments aléatoires à partir d'un tableau avec cette fonction:
function getRandomElements(array $array): array
{
$result = [];
$count = count($array);
for ($i = 0; $i < rand(0, $count); $i++) {
$result[] = rand(0, $count);
}
$result = array_unique($result);
sort($result);
return $result;
}