Вы используете слишком много операторов 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>