Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Uscita errata dal ciclo while in caso di mancato raggiungimento condizione

    Salve, probabilmente è una domanda banale, ma non trovo una soluzione:
    Codice PHP:
    $i '';
    while(
    $i <= 4){
          ....;
         if(
    $condizione){
            ...;
            ++
    $i;
          }

    Ho notato che se $i non arriva a 4, continua a ciclare i dati in perpetuo.
    Esiste un comando per dire al ciclo while che se in tutto il ciclo $i non viene più incrementata bisogna fermarsi?
    Ho provato prima dell'ncremento a fare:
    Codice PHP:
    $a $i;
    ...
    ++
    $i;
    ..
    if(
    $a == $i){
        break;
        } 
    Ho provato anche con exit e simili, ma purtroppo non funziona: avete qualche idea?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Il codice che hai scritto non può capire il "tuo" mai, come fa a decidere che $i non raggiungerà mai 4?

    Tu gli stai dicendo:
    - $i è uguale a 4?
    - no?
    - $condizione è vera?
    - no?
    - riesegui il ciclo

    devi trovare il modo di dirgli come riconoscere il fatto che da un certo punto in poi $condizione non sarà mai verificata e quindi metterci un break.

    Leggendo il tuo codice, senza sapere niente su $condizione, andrei in loop anche io, figurati un PC che non si pone neanche domande ma esegue e basta ciò che gli dici.

  3. #3
    Ti avevo scritto una risposta lunghissima, ma il server me l'ha cancellata quando ho premuto invio, perchè nel frattempo è scaduta la sessione per inattività.
    Comunque al posto di riscriverti tutto cercherò di dare una breve spiegazione:
    1)il ciclo l'ho cambiato in do-while(la prima varibaile che stampa esiste sempre, quindi non mi sembrava un problema);
    2)ho cambiato la condizione del while;
    3)adesso mi stampa cerca di stampare i dati una volta di più rispetto al necessario, quindi l'ultima stampa è costiyuita da variabili vuote, e appaiono sempre come errori sullo schermo;
    4)tolto tutto questo funziona bene;
    Codice PHP:
    do{
        
    $a--;//decremento per il confronto fuori dal ciclo while
        
    if($i <= 4){
              ..;
         foreach(..){
    //questa condizione si verifica sol ose esistono dati da stampare
          
    $i++;
          
    $a $i;
          }
       }
    }while(
    $i == $a); 
    if($i <= 4) dovrebbe essere cambiato, con "se $i ha subito un incremento precedentemente" ad esempio.
    Il problema è che esegue il ciclo sempre una volta in più rispetto a quella richiesta, immagino perchè se $i = $a => 4 = 4, esegue di nuovo per trovarsi con => 4 =3, e quindi non più vera....
    Come lo blocco prima, quando cerca di rieseguire l'ultima volta il passaggio?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Stai dando informazioni troppo scarne perché ti si possa rispondere.
    Spiega per bene cosa devi fare (non il problema, quello si è capito), ma ciò che deve fare il codice e cosa vuoi ottenere, magari integrando con altro codice che influisce su quello che hai già postato.

  5. #5
    Devo semplicemente capire se la variabile $i ha subito o meno un incremento durante il precedente ciclo do-while, se no "break", se si continua.

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Il tuo problema però, se ho ben capito, è che $i potrebbe non cambiare mai e questo rischia di mandarti in loop.

    E' su questa eventualità che devi lavorare, poi il ciclo si risolve facilmente.

  7. #7
    Esatto, comunque ho risolto aggiungendo un'altra variabile che si svuota solo nel ciclo, quindi se non è stata "svuotata" dal propio contenuto vuol dire che non è stato effettuato il ciclo foreach, poi ho aggiunto che se "($i <= 2)"(ad esempio)"{..fai il ciclo}else{ break; }".
    Così sono riuscito a risolvere il problema. Grazie per l'aiuto.


    P.S. Andava veramente in loop, non riuscivo a bloccarlo....

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 © 2024 vBulletin Solutions, Inc. All rights reserved.