Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di ade_v
    Registrato dal
    Jan 2001
    Messaggi
    460

    [php] Logica di un ciclo FOR

    Ho un array strutturato così:

    Codice PHP:
    $mio_array = array(9,10,12,14,15,16); 
    Il mio scopo è controllare quali valori dell'array siano consecutivi e mostrare a video il primo e l'ultimo valore di ogni serie consecutiva. Quando la consecutività dei numeri si interrompe devo andare a capo

    In pratica, dato l'array $mio_array, dovrei visualizzare i dati in questo modo:

    9 - 10
    12
    14 - 16

    Qualche idea?
    ade_v@yahoo.it

    Fletto i muscoli e sono nel vuoto

    Se inviate messaggi privati, avvisatemi sul forum...

  2. #2
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    <?
    $mio_array = array(9,10,12,14,15,16);

    for($n=0; $n<count($mio_array); $n++){
    if(($mio_array[$n+1] - $mio_array [$n]) == 1){
    $newarray[] = $mio_array [$n] . "-";
    }
    if(($mio_array[$n+1] - $mio_array [$n]) != 1){
    $newarray[] = $mio_array [$n] . "
    ";
    }

    }

    foreach($newarray as $x){
    echo "$x";
    }
    ?>

    sono troppo forte!

  3. #3
    Utente di HTML.it L'avatar di ade_v
    Registrato dal
    Jan 2001
    Messaggi
    460
    Però così ottengo:

    9-10
    12
    14-15-16

    mentre avrei bisogno di ottenere questo:

    9-10
    12
    14-16

    E' possibile farlo?
    ade_v@yahoo.it

    Fletto i muscoli e sono nel vuoto

    Se inviate messaggi privati, avvisatemi sul forum...

  4. #4
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    tutto si può amico. tutto si può.

    però purtroppo ora non ho tempo. usa la logica. che George Boole e Bertrand Russel siano con te!

  5. #5
    Utente di HTML.it L'avatar di ade_v
    Registrato dal
    Jan 2001
    Messaggi
    460
    Il problema di fondo è che questo $newarray viene generato nel modo sbagliato perchè è vero che viene visualizzato ma solo in virtù di un tag
    infilato in mezzo all'array stesso

    Codice PHP:
    Array
    (
        [
    0] => 9-
        [
    1] => 10

        
    [2] => 12

        
    [3] => 14-
        [
    4] => 15-
        [
    5] => 16


    Quello di cui ho bisogno è un array fatto così:

    Codice PHP:
    Array
    (
        [
    0] => Array
                           (
                            [
    0] => 9
                            
    [1] => 10
                           
    )
        [
    1] => Array
                           (
                            [
    0] => 12
                           
    )
        [
    2] => Array
                           (
                            [
    0] => 14
                            
    [1] => 16
                           
    )


    ade_v@yahoo.it

    Fletto i muscoli e sono nel vuoto

    Se inviate messaggi privati, avvisatemi sul forum...

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Codice PHP:
    <?php
    $mio_array 
    = array(9,10,12,14,15,16);

    function 
    serie($array) {
        
    $range range(    min($array) , max($array) );
        
    $interv = array();
        
    $i 0;
        foreach(
    $range as $valore) {
            if (
    in_array($valore,$array)) 
                
    $interv[$i][] = $valore;
            else
            
    $i++;
        }

        
    $finale = array();
        
    $k 0;
        foreach(
    $interv as $elm) {
            if (
    count($elm) < 3) {
                
    $finale[$k][] = $elm;
                
    next($elm);
            }
            else {
                
    $finale[$k][] = min($elm);
                
    $finale[$k][] = max($elm);
            }
        
    $k++;
        }
    return 
    $finale;
    }

    echo 
    '<pre>';
    print_r(serie($mio_array));
    ?>

  7. #7
    Utente di HTML.it L'avatar di ade_v
    Registrato dal
    Jan 2001
    Messaggi
    460
    funziona che è una meraviglia.
    sei un mago degli array.
    ade_v@yahoo.it

    Fletto i muscoli e sono nel vuoto

    Se inviate messaggi privati, avvisatemi sul forum...

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Mi fa piacere.

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Piccola correzione. Creava un livello più del necessario.

    Codice PHP:
    $mio_array = array(2,3,4,5,7,9,10,12,14,15,16,17,20,21,24,28,29,30,31);

    function 
    serie($array) {
        
    $range range(    min($array) , max($array) );
        
    $interv = array();
        
    $i 0;
        foreach(
    $range as $valore) {
            if (
    in_array($valore,$array)) 
                
    $interv[$i][] = $valore;
            else
            
    $i++;
        }

        
    $finale = array();
        
    $k 0;
        foreach(
    $interv as $elm) {
            if (
    count($elm) < 3) {
                foreach(
    $elm as $v)
                    
    $finale[$k][] = $v;
            }
            else {
                
    $finale[$k][] = min($elm);
                
    $finale[$k][] = max($elm);
            }
        
    $k++;
        }
    return 
    $finale;
    }

    echo 
    '<pre>';
    print_r(serie($mio_array)); 

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