6
votes

Comment sélectionner des valeurs aléatoires à partir d'un tableau en PHP?

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 array_rand (array_flip ($ my_array), 8) mais cela ne fonctionne pas, car les objets ne peuvent pas agir comme des clés pour un tableau.

Je sais que je pourrais utiliser shuffle , 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?


0 commentaires

6 Réponses :


2
votes

Vous pouvez utiliser array_rand pour choisir les touches de manière aléatoire et un foreach pour recueillir les objets: xxx


4 commentaires

Parce qu'il renvoie les clés de tableau, pas les valeurs?


@Chris, c'est pourquoi vous utilisez $ my_array [$ clé] .


@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.



0
votes

Qu'en est-il ?:

$count = count($my_array);
for ($i = 0; $i < 8; $i++) {
  $x = rand(0, $count);
  $my_array[$x];
}


0 commentaires

9
votes
$result = array();
foreach( array_rand($my_array, 8) as $k ) {
  $result[] = $my_array[$k];
}

0 commentaires

7
votes
$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.

4 commentaires

Boucle libre. C'est une belle solution.


@Chords Vous pouvez parier que shuffle et array_slice contient un peu de boucle. :)


Touche, mais au moins je n'ai pas à regarder!


Épique! Merci



0
votes

Je viens de trouver cela dans notre code et j'espérais trouver une solution plus lisible: xxx


0 commentaires

0
votes

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;
    }


0 commentaires