• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

zufallsscript

Status
Für weitere Antworten geschlossen.

Karl das kahle Moorhuhn

Neues Mitglied
Also folgendes Problem: Ich hab jede Menge Zahlen in einem Array gespeichert. Die Zahlen sind zwar sortiert, aber nicht durchgehend.
Ich möchte jetzt gewisse Werte auslesen (im Beispiel 2), und zwar zufällig, d.h. irgendwelche Werte, die nicht gleich sein sollen, nehme ich. Dies geht z.B. folgendermaßen:
PHP:
$array = array(1,2,4,6,9,45,7567);
$count = count($array) - 1;
mt_srand((double)microtime()*1000000);
$chance = mt_rand(0,$count);
$zahl1 = $array[$chance];

do {
mt_srand((double)microtime()*1000000);
$chance = mt_rand(0,$count);
$zahl2 = $array[$chance];
} while ($zahl1 == $zahl2);

echo $zahl1 . "<br>";
echo $zahl2;

Da ich jedoch Perfektionist bin und außerdem auf meine Rechenleistung achten muss, ist mir das zu kompliziert und zu ausführlich. Hat jemand eine Idee, wie man das gleiche Ergebnis auf einfacherem Weg erreicht? Ich will also 2 beliebige Werte aus einer Datenreihe auslesen
 
Es wird nicht weniger code, aber die rechenleistung müsste geringer sein, da keine schleifen etc vorkommen
PHP:
<?php
$array = array(1,2,4,6,9,45,7567);

$max = count($array) -1;
$i = (rand(1,$max));
$zahl1 = $array[$i];

unset($array[$i]);
$array = array_values($array);

$zahl2 = $array[rand(1,$max-1)];

echo $zahl1.'<br>'.$zahl2;
?>
 
Zuletzt bearbeitet:
Achso, das wusste ich ja nicht. Aber dann kannst du doch éine Abgewandelte Version benutzen, die mir gerade eingefallen ist.
PHP:
<?php 
$array = array(1,2,4,6,9,45,7567); 

$max = count($array) -1; 
$i = (rand(1,$max)); 
$zahl1 = $array[$i]; 

unset($array[$i]); 
$array = array_values($array); 
$zahl2 = $array[rand(1,$max-1)]; 

echo $zahl1.'<br>'.$zahl2; 

$array[] = $zahl1;
$array = array_values($array); 
?>
 
und dann müsste ich anschließend das Array wieder sortieren. Dann aber wäre diese Lösung auch nicht wirklich resourcensparender. Hat noch jemand eine Idee? Trotzdem Danke für deine Mühe
 
Füge einfach an das script
PHP:
$array = sort ($array);

Aber das mit der Rechenleistung stimmt wahrscheinlich. Ich glaube aber fast, dass man sie nicht weiter herunterbekommt
 
Also, sorry das es nicht zum Thema gehört.
Aber ich habe noch nie was von einer do schleife in php gehört, was bringt das?
 
eine do-Schleife ist genauso wie eine while-schleife, nur das die bedingung am ende abgefragt werden und nicht am anfang.

Zudem läuft eine do schleife immer einmal durch, auch wenn von anfangan die bedingung erfüllt ist.

Beispiel:
PHP:
$i = 5;
while ($i > 0)
{
          $i++
}
//$i ist nun 5

$i = 5;
do {
          $i++;
} 
while ($i > 0)
//$i ist nun 6
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben