Codice PHP:
<?php
$ore_risultanti = array(5, 4, 4, 10); //Qui le ore da "lavorare"
$ore_da_scalare = 23;
if($ore_da_scalare > 0){
if(array_sum($ore_risultanti) >= $ore_da_scalare){ //Se ci sono almeno le ore necessarie per esaurire $ore_da_scalare
$i = 0;
$ore_disponibili = $ore_da_scalare;
do{
$ore_disponibili -= $ore_risultanti[$i];
$i++;
}while($ore_disponibili > 0);
echo "Ho scalato tante ore ! Precisamente " . $ore_da_scalare . ". In particolare fino a ora " . $i . " con un avanzo (su ora ".$i.") di: " . abs($ore_disponibili) . " ora";
}else{
echo "Non ci sono abbastanza ore risultanti per soddisfare la richiesta da scalare ! Massimo: " .array_sum($ore_risultanti) . "h";
}
}
?>
Questo dovrebbe fare al caso tuo, molto semplice nulla di troppo sofisticato. In primo luogo ti ho messo le ore in un array in modo tale da darti flessibilità sul numero di ore memorizzabili (2, 3, 10, 100, 1000). Chiaramente se dovrai gestire solo e unicamente 3 ore non sarebbe necessario ma ho cercato di essere il più generico possibile in modo tale da darti quanto più margine possibile.
Sostanzialmente è un ciclo che scala gradualmente da $ore_da_scalare le singole ore memorizzate nell'array (come quindi se fossero memorizzati in singoli variabili). Si ferma naturalmente quando le ora da scalare sono finite fornendoti a video un piccolo resoconto.
Le ore che vai a scalare dalle varie variabili sono pari naturalmente a quello che stabilisci in $ore_da_scalare, se ti interessa invece sapere fin dove è stato necessario arrivare per scalare tutte le ore, ti viene notificato anche questo (per intenderci nella variabile $i), quindi poi per le successive operazioni puoi usare questa variabile come riferimento.
Ho aggiunto solo un controllo in più (Secondo if) per verificare se effettivamente il numero totale di ore presenti fosse sufficiente per esaurire le ore da scalare.
Spero vada bene per le tue esigenze