обновить несколько ключей в массиве, представляющем индикаторы выполнения на разных скоростях - PullRequest
1 голос
/ 17 февраля 2011

у меня 9 индикаторов прогресса. генерируется из массива, как это:

$progress = "100-30-0-0-0-0-0-0-0";
$array= explode("-", $progress ); 

Мне нужно обновить индикатор выполнения на разных скоростях. Вот как я это делаю сейчас:

if($array[0] >= 100){  $array[0]  = 100; }else{ $array[0] = $array[0] + rand(3,8); }    
if($array[0] >= 75){if($array[1] >= 100 ){ $array[1] = 100; }else{ $array[1] = $array[1] + rand(2,7); }} 
if($array[1] >= 75){if($array[2] >= 100 ){ $array[2] = 100; }else{ $array[2] = $array[2] + rand(2,5); }} 
if($array[2] >= 75){if($array[3] >= 100 ){ $array[3] = 100; }else{ $array[3] = $array[3] + rand(1,4); }} 
if($array[3] >= 75){if($array[4] >= 100 ){ $array[4] = 100; }else{ $array[4] = $array[4] + rand(1,3); }} 
if($array[4] >= 75){if($array[5] >= 100 ){ $array[5] = 100; }else{ $array[5] = $array[5] + rand(1,3); }} 
if($array[5] >= 75){if($array[6] >= 100 ){ $array[6] = 100; }else{ $array[6] = $array[6] + rand(1,2); }} 
if($array[6] >= 75){if($array[7] >= 100 ){ $array[7] = 100; }else{ $array[7] = $array[7] + rand(0,2); }} 
if($array[7] >= 75){if($array[8] >= 100 ){ $array[8] = 100; }else{ $array[8] = $array[8] + rand(0,1); }} 

if($array[0] > 100 ){ $array[0] = 100;}
if($array[1] > 100 ){ $array[1] = 100;}
if($array[2] > 100 ){ $array[2] = 100;}
if($array[3] > 100 ){ $array[3] = 100;}
if($array[4] > 100 ){ $array[4] = 100;}
if($array[5] > 100 ){ $array[5] = 100;}
if($array[6] > 100 ){ $array[6] = 100;}
if($array[7] > 100 ){ $array[7] = 100;}
if($array[8] > 100 ){ $array[8] = 100;}

$progress  = implode("-", $array); 

Это обновляет первый индикатор выполнения до 75%, от 3 до 8% за время до начала увеличения следующего индикатора, все медленнее и медленнее.

Теперь мне нужен цикл для обновления бесконечного количества индикаторов прогресса таким способом.

1 Ответ

4 голосов
/ 17 февраля 2011

Вы используете слишком много операторов if, делая все вручную.Вы должны делать это цикличноза пределы 9.

Это циклически изменяет значения прогресса и, если один из них меньше 100, применяет случайное добавление, никогда не превышает 100, а затем прерывается..

<?php
$progress = isset($_GET['progress'])?$_GET['progress']:"0-0-0-0-0-0-0-0-0";
$array= explode("-", $progress ); 

$randArgs = array(
    array(3,8),
    array(2,7),
    array(2,5),
    array(1,4),
    array(1,3),
    array(1,3),
    array(1,2),
    array(0,2),
    array(0,1),
);

foreach($array as $key => $progressbar) {
    if ($progressbar < 100) {
        $limits = isset($randArgs[$key]) ? $randArgs[$key] : array(0,1);
        $nextValue = $progressbar + rand($limits[0], $limits[1]);
        $array[$key] = $nextValue > 100 ? 100 : $nextValue;
        break;
    }
}

$progress  = implode("-", $array);

var_dump($progress);

?>
<a href="?progress=<?php echo $progress?>">Next</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...