2016-11-22 4 views
0

Ich habe dieses Arrayeine zufällige für ein Array mit dem gleichen Wert

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

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

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

Ich möchte für dieses Array eine zufällige machen, aber immer die gleichen Werte erhalten. Zum Beispiel möchte ich immer das Array mit den Schlüsseln 12 11 13 10 bekommen. Ich habe im Internet gesucht, aber die Werte sind immer unterschiedlich. Kannst du mir bitte helfen ? Thx im Voraus und sorry für mein Englisch

+0

Was bedeutet das genau 'always'? Die einzige Möglichkeit besteht darin, eine Zufallszahl zu generieren und sie dann irgendwo zu speichern (Datenbank oder Sitzung je nach Bedarf) und später zu verwenden ... – Aerendir

+1

, die nicht wie ein Array aussieht ... eher wie ein JSON-Objekt. Kannst du bitte ein Beispiel dafür geben, was du versucht hast? –

+0

@mistermartin getan –

Antwort

0

Sie diese Variante von shuffle verwenden:

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

Wenn Sie zweimal zur Verfügung stellen die gleichen Argumente, erhalten Sie zweimal den gleichen Rückgabewert. Das zweite Argument ist der Keim. Sie könnten dies zum Beispiel beim ersten Mal als Zufallszahl erzeugen, aber dann merken Sie sich das nächste Mal, dass Sie das gleiche Array reproduzieren müssen.

Beispielaufruf:

$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

Warum bauen Sie Ihr eigenes Shuffle, statt das eingebaute 'srand()' als Seed zu verwenden? es scheint, als ob 'srand ($ samen); shuffle ($ arr); 'wäre genauso effizient. –

+1

Der Grund, warum ich nicht auf * srand * Bezug genommen habe, ist, dass es bei PHP-Installationen, auf denen der Suhosin-Patch installiert ist, nicht wie erwartet funktioniert. Die Verwendung von * srand * ist ebenfalls schwierig, da sie sich bei mehrmaligem Aufruf in derselben Sitzung auf unerwartete Weise verhält. Siehe den Kommentarabschnitt zu ['srand'] (http://php.net/manual/en/function.srand.php). – trincot

Verwandte Themen