Stringa con variabili in un array: errore?

L'idea è semplice, ma non viene visualizzato quello che voglio:

ecco la parte di codice che contiene l'array:

$dati = array();
   while ($row = $result->fetchRow(2)) {
      $dati[$n] = (
         array (
            'cid' => "$row[cid]",
            'nome' =>"$row[nome]",
            'taglio'=>"$row[taglio]",
            'prezzopub'=>"$row[prezzopub]",
            'stock'=>"$row[stock]",
            'img'=>"$row[img]",
            // INSERIRE QUI!!!
         )
      );

mi interessa inserire una stringa in quel punto!

Ecco la stringa:

$listini = "'listino1' => \$row[listino1]";

inserita in quel punto risulta così:

   $dati[$n] = (
      array (
         'cid' => "$row[cid]",
         'nome' =>"$row[nome]",
         'taglio'=>"$row[taglio]",
         'prezzopub'=>"$row[prezzopub]",
         'stock'=>"$row[stock]",
         'img'=>"$row[img]",
         $listini // ECCO LA VARIABILE INSERITA!!!
         )
   );

scrivendo:

echo ($listini);

echo '<pre>';

print_r ($dati);

echo '</pre>';

die ();

alla fine del while ecco cosa ottengo a video:

'listino' => "$row[listino1]"

Array
(
    [0] => Array
        (
            [cid] => 1
            [nome] => Black Yellow
            [taglio] => 5
            [prezzopub] => 0
            [stock] => 10
            [img] => blackyellow.jpg
            [0] => 'listino' => "$row[listino1]"
        )

mi vede sempre la matrice [0] prima della stringa!!!

Credo possa dipendere solo dalla sintassi interna di php ma non ho trovato documentazione al riguardo...

chi mi sa dire dove sbaglio?

inviato 10 anni fa
arjuna
X 0 X

puoi riportare un ipotetico output di print_r ($dati); che vorresti ottenere? Non mi è chiara la struttura di $dati che desideri

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

eccola:

Array
(
    [0] => Array
        (
            [cid] => 1
            [nome] => Black Yellow
            [taglio] => 5
            [prezzopub] => 0
            [stock] => 10
            [img] => blackyellow.jpg
            [listino1] => valore di $row[listino1]
        )

$listini deve diventare: listino1 => $row[listino1]

$row[listino1] assumerà il valore relativo del database, poniamo caso 2.83

quindi

Array
(
    [0] => Array
        (
            [cid] => 1
            [nome] => Black Yellow
            [taglio] => 5
            [prezzopub] => 0
            [stock] => 10
            [img] => blackyellow.jpg
            [listino1] => 2.83
        )

in pratica mi si crea quell'indice [0] che non capisco da dove salta fuori

risposto 10 anni fa
arjuna
X 0 X

non mi è chiaro il motivo che ti spinge a non fare così:

             array (

            'cid' => "$row[cid]",

            'nome' =>"$row[nome]",

            'taglio'=>"$row[taglio]",

            'prezzopub'=>"$row[prezzopub]",

            'stock'=>"$row[stock]",

            'img'=>"$row[img]",

            'listino1'=>$row['listino1']

         )

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

$listini è una variabile.

può essere necessario un solo listino come nel caso proposto ma possono esserci un massiomo di 3 listini.

In questo caso:

$listini = 'listino1'=>$row['listino1'], 'listino2'=>$row['listino2'], 'listino3'=>$row['listino3']

posso sempre trovare un altro modo per ottenere lo stesso risultato, ma volevo capire per quale regola di sintassi non mi è possibile scrivere una variabile che contiene delle variabili all'interno di un array

credo possa essere una cosa molto utile specialmente nel caso si voglia creare del codice php che crea codice php.

risposto 10 anni fa
arjuna
X 0 X

Per eseguide del codice PHP presente in una stringa si usa la funzione eval().

Nel tuo caso però è più corretto optare per una struttura dati adeguata alle esigenze piuttosto che cercare qualche escamotage. Gli array in PHP sono sufficientemente flessibili per poter risolvere il tuo problema senza ricorrere a codice dinamico.

 :bye:

P.S.: dai una lettura veloce alla lezione sugli array del nostro corso PHP base

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Lo faccio subito

risposto 10 anni fa
arjuna
X 0 X

Fatto!

ecco la soluzione:

if (CONDIZIONE 1) {
   $dati[$n][listino] = $row['listino1'];
} else {
   $dati[$n][listino1] = $row['listino1'];
   $dati[$n][listino2] = $row['listino2'];
   $dati[$n][listino3] = $row['listino3'];
}

ma non ho capito come utilizzare eval();

ci ho provato ma senza successo. Nel caso precedente come dovevo fare?

risposto 10 anni fa
arjuna
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda