Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611

    Creare foreach annidati indefiniti

    ciao a tutti
    lo so il titolo non è dei migliori ma provo comunque a spiegarvi cosa voglio fare, ho questi foreach:

    Codice PHP:
    foreach($blocchi[0] as $value1)
      foreach(
    $blocchi[1] as $value2)
        foreach(
    $blocchi[2] as $value3)
          foreach(
    $blocchi[3] as $value4){
            echo 
    $value1.' '.$value2.' '.$value3.' '.$value4;
          } 
    e fin qui tutto ok perchè ho creato io 4 foreach annidati, voglio però fare in modo che non siano sempre 4, una volta possono essere 2, un'altra volta 3, un'altra 5 e così via...
    Come posso fare per ottenere tanti foreach in maniera dinamica? In pratica il numero dei cicli deve cambiare in base ad un numero che gli passo, gli passo 2 e saranno 2 cicli, gli passo 5 e saranno 5 e così via.

    Guardando la struttura qualcosa mi dice che devo usare un for, però come?

    Spero di essermi spiegato
    Grazie anticipatamente
    NON ABBANDONATE CANI O GATTI!!!

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Puoi dare un esempio di un array ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Puoi dare un esempio di un array ?
    eccoli

    Codice PHP:
    $blocchi = array(=> array('54####S','55####M','56####L'),
                          
    => array('57####Rosso','58####Verde','59####marrone'),
                          
    => array('60####40x60','61####60x90','62####80x120'),
                          
    => array('63####liscia','64####satinata','65####opaca','66####rotta')); 
    NON ABBANDONATE CANI O GATTI!!!

  4. #4
    Dovresti usare la ricorsività.
    Qualcosa del genere:

    Codice PHP:

    $blocchi 
    = array(    
        
    => array('54####S','55####M','56####L'),        
        
    => array('57####Rosso','58####Verde','59####marrone'),    
        
    => array('60####40x60','61####60x90','62####80x120'),    
        
    => array('63####liscia','64####satinata','65####opaca','66####rotta')
    );

    function 
    printAll($a){        
        if (!
    is_array($a)){        
            echo 
    $a.' ';       
            return;   
        }
        foreach(
    $a as $v) {        
            
    printAll($v);    
        }
    }

    printAll($blocchi); 
    Ultima modifica di lucavizzi; 23-07-2018 a 23:07

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611
    il foreach del foreach del foreach ecc ecc mi serve per ottenere qualcosa del genere


    S Rosso 40x60 liscia
    S Rosso 40x60 satinata
    S Rosso 40x60 opaca
    S Rosso 40x60 rotta
    S Rosso 60x90 liscia
    S Rosso 60x90 satinata
    S Rosso 60x90 opaca
    S Rosso 60x90 rotta
    S Rosso 80x120 liscia
    ....
    ....
    ....

    in totale 108 combinazioni, che è il totale del prodotto dei vari array
    NON ABBANDONATE CANI O GATTI!!!

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Prova questo

    Codice PHP:
    <?php
    function combine($arrayOfArrays)
    {
       
    $result = array();
       for (
    $i=0;$i count($arrayOfArrays);$i++) {
           foreach (
    $arrayOfArrays[$i] as $currentValue) {
               if (isset(
    $result[$i-1])) {
                   foreach(
    $result[$i-1] as $previousArray) {
                       
    $result[$i][] = array_merge($previousArray, array($currentValue));
                   }
               }
               else {
                   
    $result[$i][] = array($currentValue);
               }    
           }
       }    
       return 
    $result[count($arrayOfArrays)-1];
    }
       
    $blocchi = array(=> array('54####S','55####M','56####L'),
                      
    => array('57####Rosso','58####Verde','59####marrone'),
                      
    => array('60####40x60','61####60x90','62####80x120'),
                      
    => array('63####liscia','64####satinata','65####opaca','66####rotta'));

    foreach (
    combine($blocchi) as $value)
    {
       echo 
    implode(' ',$value)."<br/>";
    }
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611
    Prova questo
    Complimenti! diciamo che ti sei sbattuto parecchio, grazie!

    pensi si possa adattare per ottenere lo scorrimento di tutte le S, poi tutte le M e poi tutte le L?
    Con quel codice mi scorre S, M, L e poi torna a S, M, L

    diciamo che non cambierebbe molto, è solo per una questione di ordine

    Grazie ancora
    Ultima modifica di activ; 24-07-2018 a 17:12
    NON ABBANDONATE CANI O GATTI!!!

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Infatti è stato più facile di quanto avrei pensato.

    E’ giusto che la funzione lavori in questo modo. Seppoi vuoi riordinare gli elementi a tuo piacimento puoi farlo con l’array che la funzione ti torna.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    1,611
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Infatti è stato più facile di quanto avrei pensato.

    E’ giusto che la funzione lavori in questo modo. Seppoi vuoi riordinare gli elementi a tuo piacimento puoi farlo con l’array che la funzione ti torna.
    si infatti
    sei stato di molto aiuto!
    grazie
    NON ABBANDONATE CANI O GATTI!!!

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.