- Home
- Categorie
- Coding e Sistemistica
- Coding
- Ciclo su variabili numerate.
-
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.
-
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
-
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
-
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.
-
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]
-
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...
-
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
-
Ah quindi i vari $row->imageX sono dei reference a delle funzioni?
In questo caso sfrutta l'eval per chiamare quelle funzioni.
-
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?
-
Ok ci sono riuscito!
Lo posto magari chissà, a qualcuno potrebbe servire:
[php]<?phpfor($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]
-
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