Navigazione

    Privacy - Termini e condizioni
    © 2020 Search On Media Group S.r.l.
    • Registrati
    • Accedi
    • CATEGORIES
    • Discussioni
    • Non letti
    • Recenti
    • Hashtags
    • Popolare
    • Utenti
    • Stream
    • Interest
    • Categories
    1. Home
    2. Categorie
    3. Coding e Sistemistica
    4. Coding
    5. Ciclo su variabili numerate.
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • K
      karedas Super User • ultima modifica di

      Ciclo su variabili numerate.

      Salve,
      Avrei la necessità di fare un ciclo su una serie di variabili le quali si differenziano nella nomenclatura unicamente per il numero finale.
      Esempio:

      
      $row->image1;
      $row->image2;
      $row->image3;
      
      ```Ogni serie di ciclo mi stampa a video un blocco di codice html/php univoco quindi vorrei evitare di scrivere  "n" volte la solita serie.
      
      Come è possibile farlo?
      
      Grazie.
      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
      • P
        paolino Moderatore • ultima modifica di

        Puoi usare due metodi, il primo implica l'utilizzo della funzione eval, l'altro l'utilizzo di variabili di variabili http://it.php.net/language.variables.variable

        Per esempio questo

        
        $a = "helloworld";
        $$a = "pippo";
        
        echo $helloworld;
        

        oppure nel caso di eval

        
        $a = "helloworld";
        eval("\$$a = \"pippo\";");
        
        echo $helloworld;
        
        

        Una cosa da notare è che i due metodi non sono uguali. Nel primo caso sto passando all'interprete un costrutto particolare tramite $$a ( poi all'interno l'interprete lo espande in $helloworld ), nel secondo caso l'espansione avviene a livello di stringa e prima che eval venga eseguito, quindi ad eval viene passato direttamente $helloworld.

        Penso che comunque a livello di performance il primo metodo sia più efficiente.

        p.s. devo spostare il thread perchè non è la sezione esatta 😉

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • K
          karedas Super User • ultima modifica di

          Ti ringrazio lo sperimento subito!
          Ho letto dell'utilizzo del concatenamento tramite il doppio $ ma ho anche letto che tale metodo non è consigliato se non con i vecchi scripts. C'è una verità in tutto questo oppure è solo frutto di qualche fantasia? 😄

          p.s. Grazie, volevo metterlo in php ma probabilmente ho fatto confusione con le finestre 🙂

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • P
            paolino Moderatore • ultima modifica di

            Vabbè ognuno poi dice la sua. C'è chi dice che così si crea codice poco leggibile, chi dice che non sono utilizzabili con le variabili superglobals, ecc...

            E' chiaro che scrivere un intero script così porta a creare un bel pò di confusione, ma quando serve serve.

            Del resto dicono lo stesso pure di eval eppure wordpress, joomla, drupal, tutti i grossi progetti in php ne fanno ampiamente uso.

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • K
              karedas Super User • ultima modifica di

              Ok sono convinto !
              Ho sperimentato però il codice ma c'è qualcosa che mi sfugge. Tra l'altro lo sto utilizzando per modificare un componente in joomla.
              Di seguito il frammento di codice:

              [php]
              <?php
              $imageCaption='';
              $a= '$row->image';
              for($x=1;$x<=26;$x++){
              $$a = $x;
              $imagesn = "$a${$a}";
              if($row->$imagesn!=NULL){?>
              <a href="#" onclick="showPreview('<?php echo JURI::base(); ?>http://www.giorgiotave.it/forum/images/properties/<?php echo $imagesn;?>','<?php echo $x; ?>');return false"><img src="http://www.giorgiotave.it/forum/images/properties/peques/peque_<?php echo $imagesn; ?>" alt=""/></a>
              <?php
              }
              }?>
              [/php]Il problema è che appunto non mi stampa il valore come se non riuscisse a richiamare la funzione precedentemente impostata e cioè i ciclici "$row->image1" , "$row->image2"... etc etc.
              Ho provato a stampare con un echo i valori prima del ciclo e comunque vada mi stampa correttamente la sintassi del valore.

              Riporto anche la matrice originale ripetuta per "n" volte:
              [php]
              <?php
              if($row->image1!=NULL){?>
              <a href="#" onclick="showPreview('<?php echo JURI::base();?>http://www.giorgiotave.it/forum/images/properties/<?php echo $row->image1;?>','1');return false"><img style="opacity: 0.75;" src="http://www.giorgiotave.it/forum/images/properties/peques/peque_<?php echo $row->image1;?>" alt=""/></a><?php }?>
              [/php]

              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • P
                paolino Moderatore • ultima modifica di

                Dipende dal tipo di $row. Poi non mi convince la parte "$$a = $x;", in pratica stai assegnando a $row->image i valori da 1 a 26

                Dovrebbe essere

                
                $a = '$row->image' . $x;
                
                

                da quel punto in poi $$a sarà equivalente a $row->image1, $row->image2, ecc...

                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • K
                  karedas Super User • ultima modifica di

                  Il problema è che il ciclo e il valore riesco ad affibiarglielo però me lo stampa come stringa e non come funzione.
                  L'uso di $row->image1 di base richiamerebbe il campo image1 dalla tabella tramite sottofunzioni (ad esempio "immagine1.jpg" e cioè il nome dell'immagine utilizzata) ma come ripeto tramite il doppio $$ non sembra riuscire a farla interpretare al PHP come il richiamo della funzione stessa.

                  Spero di essermi spiegato ho modificato anche la spiegazione 😄

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • P
                    paolino Moderatore • ultima modifica di

                    Ah quindi i vari $row->imageX sono dei reference a delle funzioni?

                    In questo caso sfrutta l'eval per chiamare quelle funzioni.

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    • K
                      karedas Super User • ultima modifica di

                      Scusa non volevo tartassarti ma ho provato in tutte le maniere e non riesco a costruire la referenza con l'eval.
                      Posso scocciarti chiedendoti un ulteriore consiglio? 🙂

                      0 Miglior Risposta Ringrazia Cita Rispondi

                        1 Risposta Ultima Risposta
                      • K
                        karedas Super User • ultima modifica di

                        Ok ci sono riuscito!
                        Lo posto magari chissà, a qualcuno potrebbe servire:
                        [php]<?php

                        for($x=1;$x<=26;$x++){
                        eval("$image=$row->image$x;");
                        if($image!=NULL){?>
                        <a href="#" onclick="showPreview('<?php echo JURI::base(); ?>http://www.giorgiotave.it/forum/images/properties/<?php echo $image;?>','<?php echo $x; ?>');return false"><img style="opacity: 0.75;" src="http://www.giorgiotave.it/forum/images/properties/peques/peque_<?php echo $image; ?>" alt=""/></a>
                        <?php }
                        }
                        [/php]

                        0 Miglior Risposta Ringrazia Cita Rispondi

                          1 Risposta Ultima Risposta
                        • P
                          paolino Moderatore • ultima modifica di

                          Ok, è perfetta, senza contare che con eval si è semplificato di parecchio pure il ciclo.

                          Ecco eval è il genere di funzione che i puristi del c++ criticheranno fino alla morte. E' chiaro che è gente che ama complicarsi la vita 😄

                          0 Miglior Risposta Ringrazia Cita Rispondi

                            1 Risposta Ultima Risposta
                          Caricamento altri post
                          Rispondi
                          • Topic risposta
                          Effettua l'accesso per rispondere
                          • Da Vecchi a Nuovi
                          • Da Nuovi a Vecchi
                          • Più Voti