Visualizzazione risultati 1 fino 10 di 10

Discussione: Trasformare array in variabile

  1. #1
    habbogalactica non è connesso Utente giovane
    Data registrazione
    12-06-2012
    Messaggi
    66

    Predefinito Trasformare array in variabile

    Ho bisogno di poter trasformare un array ottenuta da un mysql_fetch_assoc in variabili in questo modo:
    La tabella è strutturata così:

    Impostazione - Valore
    imp1 - val1
    imp2 - val2
    imp3 - val3

    Ho bisogno di poter creare 3 variabili col nome imp1,imp2,imp3 con a loro volta il valore val1,val2,val3. Come posso farlo senza creare un codice chilometrico?
    (Anche perché non capisco perché se faccio print_r del mysql_fetch_assoc mi stampa solo 1 risultato, invece se uso anche il while me li stampa tutti)

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,253

    Predefinito

    Puoi trasformare un'array associativo in una serie di variabili usando extract.

    Ricorda che mysql_fetch_assoc ti ritorna una sola riga del database, sotto forma di array con un campo per ogni colonna; per ottenere tutte le righe devi, come hai detto tu sopra, eseguire la funzione più volte usando un ciclo.

  3. #3
    habbogalactica non è connesso Utente giovane
    Data registrazione
    12-06-2012
    Messaggi
    66

    Predefinito

    Soltanto che io ho una array di questo tipo:

    Array ( [type] => onoff [setting] => on )

    Ho bisogno di creare una variabile di nome $onoff = "on", non $type = "onoff" e $setting = "on", o forse farei prima a modificare la tabella con soltanto una riga e diverse colonne?

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,253

    Predefinito

    Perché non piazzarli tutti in un array tipo questo sotto, così puoi muoverlo più facilmente e non rischi di sovrascrivere variabili già esistenti?

    Codice:
    Array( [onoff] => 'on' )
    Qualcosa tipo

    Codice PHP:
    $settings = array();
    while (
    $riga = mysql_fetch_assoc(...))
    $settings[$riga['type']] = $riga['setting'];

    echo
    $settings['onoff'];
    Ultima modifica di dreadnaut : 19-11-2012 alle ore 23.46.29

  5. #5
    Guest

    Predefinito

    Se parti da una situazione così

    Codice PHP:
    Array (
    "imp1" => val1,
    "imp2" => val2,
    ...
    "impN" => valN
    );
    Considerando che (Nota il doppio $)

    Codice PHP:
    $$variabile = valore
    ti crea una nuova variabile il cui nome è il valore di $variabile e gli assegna il valore valore, tipo

    Codice PHP:
    $animale = "cane";

    $
    $animale = "fido";
    crea la variabile $cane il cui valore è fido,

    il tuo problema lo risolvi facendo

    Codice PHP:
    foreach($array as $key => $value) {
    $
    $key = $value;
    }

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,253

    Predefinito

    Nota che risolvi quel problema, ma ne crei mille altri: se nella tabella c'è una riga che invece di cane contiene il nome di una variabile importante del tuo script, rischi di sovrascriverla e fare danni.

    Una cosa del genere non va fatta e basta, per sicurezza, poco importa se il linguaggio te lo permetta.

  7. #7
    habbogalactica non è connesso Utente giovane
    Data registrazione
    12-06-2012
    Messaggi
    66

    Predefinito

    Grazie dell'aiuto ma credo che sceglierò la via meno complicata, poiché quella funzione estrae soltanto un risultato, ho creato 4 colonne diverse col nome dell'impostazioni in modo da avere $data['imp1'] = "val1", senza per forza usare un while.

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Nota che risolvi quel problema, ma ne crei mille altri: se nella tabella c'è una riga che invece di cane contiene il nome di una variabile importante del tuo script, rischi di sovrascriverla e fare danni.

    Una cosa del genere non va fatta e basta, per sicurezza, poco importa se il linguaggio te lo permetta.
    Tu non la usi. Ma da qui a dire che non va fatto ne passa!

    Se lo script è tuo, sicuro che conosci quello che fa.
    Se hai il dubbio che possa essere sovrascritta una variabile importante, puoi metterci sempre i dovuti controlli (ed esempio impedire la memorizzazione di campi contenenti quel valore, verifica postuma che il valore non sia in un range proibito, ...)

  9. #9
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,253

    Predefinito

    Oh beh, se vuoi spararti in un piede fallo pure, concordo che alla stupidità umana non c'è mai limite.

    Ma se tu vuoi permettere a dei dati in un database di decidere quali variabili vengono definite in uno script in esecuzione, stai cercando rogne. Per quanto tu possa sapere quello che lo script fa, il suo comportamento può cambiare in base al contenuto della tabella. E della tabella non ti puoi fidare, a meno di non essere certo che il tuo script sia perfettamene sicuro, il database intoccabile. Che è un po' una presunzione, per quanto si confidi nelle proprie capacità.

    Aggiungere ulteriori controlli di errore per aggirare una schifezza inutile è ancora peggio Non scrivi la schifezza in primo luogo.

  10. #10
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Concordo con dreadnaut, i nomi delle variabili devono essere gestiti dal programmatore non dall'utente! Utilizzare valori associativi per le chiavi viene insegnato anche nelle scuole e nelle università.

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Codice PHP:
    $settings = array();
    while (
    $riga = mysql_fetch_assoc(...))
    $settings[$riga['type']] = $riga['setting'];

    echo
    $settings['onoff'];
    Questo è il modo corretto. Ok che, come si dice in questo ambito, "se funziona allora è giusto", ma ci sono delle strategie (chiamate "algoritmi") anche per programmare, perchè programmare è soprattutto ingegno!

    E poi se ti danno un consiglio non può che farti bene.
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •