Zufallsberechnung von Strecken

Arndtinho

Erfahrenes Mitglied
Zufällige Aufteilung einer Gesamtstrecke auf Einzelstrecken

Hallo,

ich habe folgende Problemstellung:
Gegeben ist eine Gesamtstrecke, eine konstante Teilstrecke und ein Array mit variablen Teilstrecken. Ich möchte nun die Gesamtstrecke auf die verschieden (Summen der) Teilstrecken aufteilen. Dazu habe ich mir diesen Ansatz ausgedacht:
PHP:
$sum_dist = 0;
$total    = 200;
$cust     = array(0 => array('name' => 'cust 1',
                             'otc'  => 20,
                             'cth'  => 25,
                             'used' => 0 
                             ),
                  1 => array('name' => 'cust 2',
                             'otc'  => 10,
                             'cth'  => 15,
                             'used' => 0 
                            ),
                  2 => array('name' => 'cust 3',
                             'otc'  => 20,
                             'cth'  => 10,
                             'used' => 0 
                            ),
                  3 => array('name' => 'cust 4',
                             'otc'  => 20,
                             'cth'  => 20,
                             'used' => 0 
                            ),
                  4 => array('name' => 'cust 5',
                             'otc'  => 30,
                             'cth'  => 35,
                             'used' => 0 
                            )
                  );
      
while ($sum_dist < $total) {
    
    // Element per Zufall wählen        
    $key = array_rand($cust, 1);
    
    // prüfen, ob Element schon einmal benutzt wurde
    if($cust[$key]['used'] == 0) {
        
        // berechnen der Vergleichsstrecke
        $sum_dist = $sum_dist + (25 + ($cust[$key]['otc'] + $cust[$key]['cth']));
        
        if ($sum_dist < $total ) {
            $cust[$key]['used'] = 1;
            $rest = $total - $sum_dist;
        }
    }
}        
echo "<br>Rest: ".$rest;
Das scheint zwar zu funktionieren, bin mir aber nicht sicher, ob es eine andere (bessere) Lösungsmöglichkeit gibt. Wie würdet Ihr das lösen?

Viele Grüße
Arndtinho
 
Zuletzt bearbeitet:
Ich würde das nicht unbedingt mit einer while() Schleife machen. Da bietet sich doch foreach an:

PHP:
foreach($cust as $teilStrecke){
  $sumDist += $teilStrecke['otc'] + $teilStrecke['cth'];
}
$rest = $total - $sumDist;

So würd ich das machen. Aber wenn die Summe der Teilstrecken größer ist als $total kann der Rest < 0 sein. Das musst du halt beachten.
Kommt darauf an was du damit machen willst.
 
hallo,

das ist auch eine idee. hat aber den "nachteil", dass die strecken nicht zufällig gewählt werden. was den rest angeht, ist es nicht weiter schlimm, dass es einen > 0 gibt.

viele grüße
arndtinho
 
Zurück