Ho scoperto oggi un trick davvero interessante, che permette in php di creare delle variabili con nomi dinamici… :-O Cosa vorra mai dire tutto ciò? Semplice:
Se io voglio che una variabile prenda il nome del contenuto di un’altra variabile, posso farlo così:
$a="pippo"; ${$a}="pluto"; echo $pippo;//a video verrà visualizzato: pluto
Mi sono trovato di fronte a questo problema, quando stamattina dovevo leggere dei records da un db, e creare delle variabili che si chiamassero come i campi del db.
Siccome sono pigro (e da qui il titolo di questo post, infatti mio papà dice che sono nato di domenica :-P), per semplificarmi la vita i campi letti dal db sono all’interno di un array associativo del tipo $array[0][‘campodb’] e scorro i risultati con un:
foreach(array_keys($array[0]) as $k){ ... }
Quindi sfruttando questa piccola scoperta in poche righe mi sono letto i valori dal db e creato le variabili contenenti i valori letti dal db.
Il codice finito risulta una cosa del tipo:
$q="SELECT campo1,campo2,...,campo20 FROM tabella WHERE condizioni"; $db->query($q); /**/ if($db->numRows>0){ foreach(array_keys($db->rows[$i]) as $k){ ${$k}=$db->rows[$i]; } }
Alla fine della fiera avrò una variabile per ogni campo presente nella SELECT con all’interno il valore letto dal db ($campo1, $campo2, … , $campo20).
In alternativa qui sotto ci sono alcuni esempi dell’utilizzo di questa features in php (direttamente da php.net)
define('ONE', 1); function one() { return 1; } $one = 1; ${"foo$one"} = 'foo'; echo $foo1; // foo ${'foo' . ONE} = 'bar'; echo $foo1; // bar ${'foo' . one()} = 'baz'; echo $foo1; // baz
Sapevate già tutto? D’oh! Sono sempre l’ultimo a scoprire le cose interessanti! ;-(
[ad]