Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258

    Sottrarre un numero a scaglioni

    Ciao a tutti, ho la necessità di scalare delle ore da tre variabili diverse, ma a scaglione partendo dalla prima arrivando a quella finale. Vi faccio un esempio:

    ore1 = 7;
    ore2 = 4;
    ore3 = 4;

    ore_da_scalare = 12;

    Lo script dove sottrarre le 12 ore partendo da ore1, in questo caso ore1 non è sufficiente quindi passa a ore2 e poi a ore3.

    Io ho pensato di fare in questo modo:

    Codice PHP:
    // Se sono presenti ore da scalare
    if ($ore_da_scalare != 0) {  
      
    $a $ore1 $ore_da_scalare ;    
    // se il risultato è negativo vado avanti   
     
    if ($a 0) {        
    $b $ore2 abs($a);    
    // se il risultato è negativo vado avanti        
    if ($b 0) {            
    $c $ore3 abs($b);            
    }        
    }} 
    Non so se sia il metodo migliore. Inoltre a me nel complesso mi serve sapere quante ore vado a sottrarre delle varie variabili. In quanto poi tali valori mi serviranno per fare altre operazioni.

    Sapete darmi una mano?

    Grazie

  2. #2
    Codice PHP:
    <?php

    $ore_risultanti 
    = array(54410); //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

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258
    Ciao, grazie mille per avermi risposto, adesso mi studio il tuo codice, cercando di adattarlo al mio scopo. Ti faccio sapere come va.

    GRazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.