2016-04-07 10 views
0

Ich habe diesen Code 3 zufällige Werte aus meinem Array zu erhalten:Wie bekomme ich mehr zufällige Elemente aus einem Array als das Array?

$maps_clean = array_filter($find_league_maps); 
$random_maps = array_rand($maps_clean,3); 

$league_match_maps = ",".$maps_clean[1].",".$maps_clean[2].",".$maps_clean[3].","; 

Diese so lange funktioniert, wie das Array mindestens 3 Werte aufweist. Jetzt möchte ich meinen Code so ändern, dass wenn ich mehr zufällige Werte als ich in meinem Array habe, es nur neue aus dem Array wieder bekommt. Ja, das bedeutet, dass ich einige Werte mehr als einmal haben kann.

Wie würde ich das tun?

+0

Was meinst du mit * iterieren zurück über und fügen Sie einen anderen Wert *? Meinst du einen Wert nur zweimal verwenden? Oder meinst du einen Standardwert? ...? – Rizier123

+0

Nur zu beachten: 'array_rand()' gibt ein Array voller zufälliger Schlüssel zurück. Sie greifen einfach auf das Array zu und verwenden Sie überhaupt keine '$ random_maps'. – Rizier123

+0

@Ja möchtest du die dritte füllen, aber mit was? Ein Standardwert? Ein Wert aus dem Array, der dann nur 2 mal in der Ausgabe ist? Mit was möchtest du den dritten füllen? – Rizier123

Antwort

0

Sie können die Elemente, die die gleichen Schlüssel eines Arrays haben, mit Werten füllen, die Sie mit $maps_clean eingeben.

$maps_clean = array_replace(array_fill(1, 3, null), array_filter($find_league_maps)); 

Hier array_fill Rückkehr:

array(3) { 
    [1]=> 
    NULL 
    [2]=> 
    NULL 
    [3]=> 
    NULL 
} 

und ihre Elemente durch die Elemente zurück durch array_filter($find_league_maps) ersetzt werden, die die gleichen Schlüssel haben.

+1

Liebe diese Antwort! Ich persönlich würde die Argumente zu 'array_replace' in Variablen für die Lesbarkeit extrahieren, aber diese 'array_fill'-Funktion ist eine neue für mich – samrap

+0

Sie wollen die geklärte Frage von OP überprüfen. OP möchte die fehlenden Werte wieder mit Werten aus dem Array füllen. – Rizier123

0

Der Array-Schlüssel wird von 0 standardmäßig beginnt mit dem so ist, versucht

$league_match_maps = ",".$maps_clean[0].",".$maps_clean[1].",".$maps_clean[2].","; 

auch, was die Ausgabe von count($maps_clean)?

+0

Sie möchten wahrscheinlich auch diesen Kommentar sehen: http://stackoverflow.com/questions/36464573/php-random-array-and-fill-array-if-less-than-the-amount?noredirect=1#comment60542145_36464573 – Rizier123

1

Sie können eine einfache while-Schleife und shuffle() das Array darin verwenden, dann erhalten Sie so viele zufällige Elemente wie Sie benötigen mit array_slice(). Wenn Sie jetzt mehr zufällige Werte als Array-Elemente haben möchten, nimmt es einfach das gesamte Array, geht in die nächste Iteration und übernimmt den Rest, den es von dem neuen gemischten Array benötigt.

-Code

<?php 

    $arr = [1,2,3,4]; 


    $random = 5; 
    $result = []; 

    while(count($result) != $random){ 
     shuffle($arr); 
     $result = array_merge($result, array_slice($arr, 0, $random - count($result))); 
    } 

    print_r($result); 

?> 
+0

Da das OP dies zum Erstellen von Paaren zu verwenden scheint, würde ich vorschlagen, die ersten beiden Einträge aus dem gemischten Array herauszuziehen, um zu vermeiden, dass ein Eintrag mit sich selbst gepaart wird. – Anthony

+0

@Anthony Ich verstehe nicht ganz, was Sie mit Paaren meinen? Und ich ziehe die ersten beiden Einträge aus dem gemischten Array. – Rizier123

+0

@rcsnooks Gern geschehen. – Rizier123

Verwandte Themen