by Anonymous » 08 Mar 2025, 13:37
Ich habe ein Array mit Werten und Wahrscheinlichkeiten (oder in PHP, Tasten und Werten): < /p>
Code: Select all
Value Probability
John 3
Peter 2
Paul 1
< /code>
Ich möchte dieses Array mischen, aber die Reihenfolge von der Wahrscheinlichkeit beeinflusst werden. Das heißt, im Durchschnitt sollte John in der Hälfte der Zeit ganz oben auf der Liste erscheinen, Peter in einer dritten Zeit und Paul ein sechstem der Zeit usw.* Die durchschnittliche Reihenfolge über Tausende von Mischungen sollte der oben angegeben sein.John
John
John
Peter
Peter
Paul
< /code>
< /li>
Verschüttet dieses Array, z. B.:
John
Paul
Peter
John
John
Peter
< /code>
< /li>
Entfernen Sie die Duplikate und lassen Sie die erste Instanz: < /p>
John
Paul
Peter
< /code>
< /li>
< /ol>
In PHP -Code könnte dies in etwa so aussehen: < /p>
$items = array(
'John' => 3,
'Peter' => 2,
'Paul' => 1
);
$probabilities = array();
foreach($items as $item => $value){
$interim = array_fill(1, $value, $item);
$probabilities = array_merge($probabilities, $interim);
}
shuffle($probabilities);
$result = array_unique($probabilities);
print("".print_r($result,true)."");
< /code>
Gibt es eine schnellere Möglichkeit, dies zu tun? />Person P1 P2 P3
John 3/6 2/6 1/6
Peter 2/6 2/6 2/6
Paul 1/6 2/6 3/6
< /code>
Beachten Sie, dass die Wahrscheinlichkeiten für den zweiten und dritten Rang aus der Wahrscheinlichkeit für den ersten Rang folgen und in den ursprünglichen Daten nicht explizit angegeben sind. Sie werden hier nur zu Ihrer Bequemlichkeit präsentiert, weil jemand in den Kommentaren unten gefragt wurde.John 3 ← line 1
Peter 2
Paul 1
Simon 6
Robert 2
William 1
...
Sean 1 ← line 786
Ich habe ein Array mit Werten und Wahrscheinlichkeiten (oder in PHP, Tasten und Werten): < /p>
[code]Value Probability
John 3
Peter 2
Paul 1
< /code>
Ich möchte dieses Array mischen, aber die Reihenfolge von der Wahrscheinlichkeit beeinflusst werden. Das heißt, im Durchschnitt sollte John in der Hälfte der Zeit ganz oben auf der Liste erscheinen, Peter in einer dritten Zeit und Paul ein sechstem der Zeit usw.* Die durchschnittliche Reihenfolge über Tausende von Mischungen sollte der oben angegeben sein.John
John
John
Peter
Peter
Paul
< /code>
< /li>
Verschüttet dieses Array, z. B.:
John
Paul
Peter
John
John
Peter
< /code>
< /li>
Entfernen Sie die Duplikate und lassen Sie die erste Instanz: < /p>
John
Paul
Peter
< /code>
< /li>
< /ol>
In PHP -Code könnte dies in etwa so aussehen: < /p>
$items = array(
'John' => 3,
'Peter' => 2,
'Paul' => 1
);
$probabilities = array();
foreach($items as $item => $value){
$interim = array_fill(1, $value, $item);
$probabilities = array_merge($probabilities, $interim);
}
shuffle($probabilities);
$result = array_unique($probabilities);
print("".print_r($result,true)."");
< /code>
Gibt es eine schnellere Möglichkeit, dies zu tun? />Person P1 P2 P3
John 3/6 2/6 1/6
Peter 2/6 2/6 2/6
Paul 1/6 2/6 3/6
< /code>
Beachten Sie, dass die Wahrscheinlichkeiten für den zweiten und dritten Rang aus der Wahrscheinlichkeit für den ersten Rang folgen und in den ursprünglichen Daten nicht explizit angegeben sind. Sie werden hier nur zu Ihrer Bequemlichkeit präsentiert, weil jemand in den Kommentaren unten gefragt wurde.John 3 ← line 1
Peter 2
Paul 1
Simon 6
Robert 2
William 1
...
Sean 1 ← line 786
[/code]