Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Usare un array associativo come variabile da MYSQL.

    E sono ore che cerco ma nulla!
    Sto cercando di utilizzare una stringa, ('abc'=>'1', 'def'=>'2') contenuta in un campo text in un database mysql, per creare un array in una pagina php ma non ci riesco e non trovo l'inghippo!
    Allora: se stampo a video il risultato del mysql_fetch_array della query mi esce, ovviamente, la stringa per intero, ovvero:
    Codice PHP:
    $estrapolazione=$array["campo_testo_dove_c'è_l'array_nel_db"];
    echo 
    $estrapolazione;
    //stampa: 'abc'=>'1', 'def'=>'2' 
    Ma se cerco di metterla in un array...
    Codice PHP:
    $prova=array($estrapolazione);
    echo 
    $prova['abc']; 
    mi dice che la variabile abc non è definita!!
    Se lo metto a mano:
    Codice PHP:
    $prova=array('abc'=>'1''def'=>'2');
    echo 
    $prova['abc'];
    //mi esce il valore '1' 
    Ora, per quanto sia gnucco, la logica è logica!
    C'è qualche limite di php del quale sono all'oscuro?
    Grazie anticipatamente!

  2. #2
    Stai confondendo stringhe con array.

    Per fare quello che chiedi, devi effettuare il parsing della stringa "'abc'=>'1', 'def'=>'2'".

  3. #3
    Originariamente inviato da filippo.toso
    Per fare quello che chiedi, devi effettuare il parsing della stringa "'abc'=>'1', 'def'=>'2'".
    ..il che mi porterebbe ad avere..?
    Dici che c'è un problema di comprensione tra la stringa e l'array?
    Cioè se uso la stringa 'abc'=>'1', 'def'=>'2' per definire l'array non va bene?
    Non capisco però il perché!
    Riesco a comprendere bene se so il meccanismo.
    Se il problema è quello che mi hai indicato tu, come faccio a fare il parsing? Ma soprattutto a cosa ti riferisci? Magari so farlo ma non l'ho collegato a questo problema.

    Grazie!

  4. #4
    Per te questi due codici si equivalgono quando è evidente che non è così:

    Codice PHP:
    <pre>
    <?php 
    $string 
    = array("'abc'=>'1', 'def'=>'2'");
    $array = array('abc'=>'1''def'=>'2');

    var_dump($string);
    var_dump($array);

    ?>
    </pre>
    Effettuare il parsing significa estrarre tramite espressioni regolari e/o funzioni di manipolazione delle stringhe, le varie componenti che ti servono per ricostruire l'array.

  5. #5
    [QUOTE]Originariamente inviato da filippo.toso
    Per te questi due codici si equivalgono quando è evidente che non è così:
    Codice PHP:
    <pre>
    <?php 
    $string 
    = array("'abc'=>'1', 'def'=>'2'");
    $array = array('abc'=>'1''def'=>'2');

    var_dump($string);
    var_dump($array);

    ?>
    </pre>
    Ovvio che stringa e array non sono uguali!
    Quello che faccio io è stampare esattamente quello che c'è nel mio campo del database, cioé 'abc'=>'1', 'def'=>'2', senza le virgolette che lo renderebbero una stringa, e quindi non utilizzabile nell'array.
    Quello che faccio è prelevare 'abc'=>'1', 'def'=>'2' dal database e inserirlo nelle parentesi dell'array, quindi il risultato sarà come hai giustamente indicato tu:
    Codice PHP:
    $array = array('abc'=>'1''def'=>'2');
    //in quanto la variabile $estrapolazione è 'abc'=>'1', 'def'=>'2'
    //quindi..
    echo $estrapolazione;
    //..sarà uguale a 'abc'=>'1', 'def'=>'2' 
    Quello che non capisco è perché la stringa presa dall'array della query al db, che comunque rimane una "stringa" utilizzabile nell'array in quanto perfettamente uguale a 'abc'=>'1', 'def'=>'2' (che funziona se inserita a mano), non risulta utilizzabile nell'array!
    Il parsing è corretto, a meno che quando mando la echo della variabile $estrapolazione, mi nasconda delle virgolette o altro che non viene stampato a video...
    Magari c'è di default e non lo so, ma non mi risulta!

    Grazie della pazienza! Non chiedo mai nulla se non mi sono realmente incastrato!

  6. #6
    Originariamente inviato da portapipe
    Ovvio che stringa e array non sono uguali!
    Da quanto stai continuando a scrivere, non ti è proprio chiaro.

    Originariamente inviato da portapipe
    Quello che faccio io è stampare esattamente quello che c'è nel mio campo del database
    Che è una stringa ...

    Se non ne sei convinto, basta eseguire un var_dump() su quanto estratto dal database e, indovina un po', ottieni "string" ...

    Originariamente inviato da portapipe
    Quello che faccio è prelevare 'abc'=>'1', 'def'=>'2' dal database e inserirlo nelle parentesi dell'array
    Ovvero inserisci UNA STRINGA come primo elemento di un ARRAY, esattamente come viene fatto in questa riga:

    Codice PHP:
    $string = array("'abc'=>'1', 'def'=>'2'"); 
    Originariamente inviato da portapipe
    Quello che non capisco è perché la stringa presa dall'array della query al db
    Quello preso dalla query del DB NON è un'array, è UNA STRINGA. Applicaci var_dump() e te ne renderai conto anche tu.

    Originariamente inviato da portapipe
    perfettamente uguale a 'abc'=>'1', 'def'=>'2'
    Per il semplice fatto che NON è perfettamente uguale.

    Ti invito a riguardare il primo codice postato che dimostra chiaramente la differenza.

  7. #7
    Ho fatto il var_dump() e indovina un pò?
    E' venuto un array!
    Continuando però indica che è una stringa...!
    Il problema è che mi veniva indicato come array quando lo mandavo in echo!
    Per quello sono andato in confusione!

    Quindi quello che viene estratto tramite fetch_array è una stringa!
    Fin qui (ora) è tutto chiaro! (grazie filippo!)
    Quindi va presa la stringa e fatta "explodere", giusto?
    Si trovano guide su come estrapolarla, creando però le variabili con il numeratore numerico "sequenziale": (passami i termini )
    $prova[0];$prova[1];ecc..
    mentre avrei bisogno di quello associativo:
    $prova[abc];$prova[def];ecc..
    definiti da me.
    Come si fa?

    p.s. non ho mai dubitato di te. Solo che avevo altri riscontri dal signorino codice!
    Intanto ho trovato qualcosa ma non funziona bene.

  8. #8

    Stringa da campo in DB come array associativo [RISOLTO]

    Ok! Mi rispondo da solo

    Per utilizzare una stringa come array associativo, c'è una semplice funzione:

    Codice PHP:
    parse_str($stringa,$output);
    // Dopodiché basta scegliere l'array desiderato
    echo $output['abc']; // mostra '1' 
    La stringa nel database, invece, deve seguire uno schema preciso:
    abc=1&def=2 ecc...
    ovvero
    chiave=valore&chiave=valore ecc...

    Tutto qui!

    Quando le cose sono semplici è rock puro! Ma perderci dietro le ore ti fa venire un nervoso...!!

    Spero che questo vi risolva dei problemi!

  9. #9

    Re: Stringa da campo in DB come array associativo [RISOLTO]

    Originariamente inviato da portapipe
    L'unico problema è che funziona dalla versione 5.x di php.
    Ma il manuale lo hai mai letto?

    parse_str() esiste da PHP 4 ed esistono molti altri modi (es. serialize()) per salvare in una stringa un array, a patto di poter cambiarne il formato (cosa che non hai mai detto).

  10. #10

    Re: Re: Stringa da campo in DB come array associativo [RISOLTO]

    Originariamente inviato da filippo.toso
    Ma il manuale lo hai mai letto?
    Perché sei così ostile? Ho semplicemente letto un vostro post dove si diceva che il problema di quel ragazzo era tra parse_str e php 4.

    Originariamente inviato da filippo.toso
    es. serialize()) per salvare in una stringa un array, a patto di poter cambiarne il formato (cosa che non hai mai detto).
    ... cosa che ho provato e che non faceva al caso mio.
    Non ho detto che volevo cambiare il formato perché, se hai letto bene, non credevo ce ne fosse bisogno.
    Quando mi hai fatto capire che, nonostante lo segnalasse come array, il risultato era sotto forma di stringa, ho trovato un modo per risolvere il problema.

    Siamo qui per imparare! Se nascessimo tutti "imparati" non esisterebbe questo forum!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.