2016-11-22 1 views
0

J'ai ce tableauFaire un hasard pour un tableau avec la même valeur

Array 
(
[19] => Array 
    (
     [nState] => -1 
     [bActive] => 1 
    ) 

[20] => Array 
    (
     [nState] => -1 
     [bActive] => 1 
    ) 

[21] => Array 
    (
     [nState] => -1 
     [bActive] => 
    ) 

Je veux faire un hasard pour ce tableau, mais toujours obtenir les mêmes valeurs. Par exemple, je veux toujours avoir le tableau avec les touches 12 11 13 10. J'ai cherché sur le web mais toujours les valeurs sont différentes. Pouvez-vous m'aider s'il vous plaît ? Thx à l'avance et désolé pour mon anglais

+0

Que signifie exactement 'always'? La seule façon de le faire est de générer un nombre aléatoire, puis de l'enregistrer quelque part (base de données ou session selon les besoins), et de l'utiliser plus tard ... – Aerendir

+1

qui ne ressemble pas à un tableau ... plus comme un objet json. pouvez-vous donner un exemple de ce que vous avez essayé, s'il vous plaît? –

+0

@mistermartin fait –

Répondre

0

Vous pouvez utiliser cette variante de shuffle:

function shuffled_seed($arr, $seed) { 
    $len = count($arr); 
    $shuffled = []; 
    while ($len) { 
     $shuffled[] = array_splice($arr, $seed % $len, 1)[0]; 
     $seed = floor($seed/$len); 
     $len--; 
    } 
    return $shuffled; 
} 

Si vous fournissez deux fois les mêmes arguments, vous aurez deux fois la même valeur de retour. Le deuxième argument est la graine. Vous pouvez par exemple générer cela comme un nombre aléatoire la première fois, mais souvenez-vous-en pour la prochaine fois que vous devrez reproduire le même tableau.

Exemple d'appel:

$arr = [1,2,3,4,5,6,7,8,9]; 
$seed = rand(); 
$result = shuffled_seed($arr, $seed); 
print_r($result); 

$result = shuffled_seed($arr, $seed); // same seed 
print_r($result); // same result 
+0

pourquoi construisez-vous votre propre shuffle, au lieu d'utiliser celui qui utilise 'srand()' comme une graine? il semble comme 'srand ($ seed); shuffle ($ arr); 'serait tout aussi efficace. –

+1

La raison pour laquelle je n'ai pas fait référence à * srand * est qu'il ne fonctionnera pas comme prévu sur les installations PHP sur lesquelles le correctif Suhosin est installé. L'utilisation de * srand * est également délicate, car il se comporte de manière inattendue lorsqu'il est appelé plusieurs fois dans la même session. Voir la section des commentaires sur ['srand'] (http://php.net/manual/en/function.srand.php). – trincot