Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344

    Esplodere array chiave/valore

    Da una lettura da database MySQL estraggo una stringa con chiave/valore così composto (posso anche modificare sia la virgola di separazione sia lo spazio di separazione tra chiave e valore):

    id_utente cognome_utente, id_utente cognome_utente, ecc.

    Ora devo esplodere l'array per scorrerlo con foreach:

    Codice PHP:
    $array explode($row['estratto'], ","); 
    così però ottengo

    [0] id_utente cognome_utente
    [1] id_utente cognome_utente

    e così via, mentre io vorrei ottenere:

    [id_utente] cognome_utente

    Devo fare un doppio explode oppure c'è un altro modo per associare direttamente chiave/valore?

    grazie

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Non immagino come faccia a funzionare ciò che hai postato dato che explode è definita da manuale come:

    codice:
    array explode ( string $delimiter , string $string [, int $limit ] )
    quindi il tuo codice dovrebbe essere

    Codice PHP:
    $array explode(",",$row['estratto']); 
    per ottenere quello che vuoi ti suggerisco questo codice di prova che ti da in $res il siultato atteso

    Codice PHP:
    $row['estratto']="fabio,fazio,pippo,baudo";

    $array explode(",",$row['estratto']);

    $res=array();
    (
    $n=count($array))%2==or die("l'array non è composto da coppie");
    for(
    $i=0;$i<$n;$i+=2)
        
    $res[$array[$i]]=$array[$i+1];

    print_r($res); 
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Codice PHP:
    $estratto 'id_utente cognome_utente, id_utente2 cognome_utente2, id_utente3 cognome_utente3';

    $result = array();

    foreach ( 
    explode(', '$estratto) as $dati ) {
        list(
    $key$value) = explode(' '$dati);
        
    $result[$key] = $value;
    }

    print_r($result); 

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Houston ... non mi ero accorto dello spazio!
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #5
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Originariamente inviato da k.b
    Codice PHP:
    $estratto 'id_utente cognome_utente, id_utente2 cognome_utente2, id_utente3 cognome_utente3';

    $result = array();

    foreach ( 
    explode(', '$estratto) as $dati ) {
        list(
    $key$value) = explode(' '$dati);
        
    $result[$key] = $value;
    }

    print_r($result); 
    Solo per far notare che usando lo spazio come separatore nell'explode tra chiave e valore si genererebbe un dato errato nel caso in cui il cognome sia costituito da più di una parola (ad esempio, "De Benedetto")

  6. #6
    Originariamente inviato da clasku
    Solo per far notare che usando lo spazio come separatore nell'explode tra chiave e valore si genererebbe un dato errato nel caso in cui il cognome sia costituito da più di una parola (ad esempio, "De Benedetto")
    Giusto, mi sono limitato a rispondere alla domanda specifica. Volendo analizzare meglio il problema ci sarebbe anche da discutere sul perche' registrare una stringa del genere in un database, anziche' registrare i singoli valori in campi distinti

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ^^^
    Eh già, non è una cosa del tutto insolita comunque. L'ho visto fare in vari contesti, ma non per associare id e cognome, per quello userei una tabella di DB tutta la vita, un record per associazione...

  8. #8
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Suvvia, con

    Codice PHP:
    list($key$value) = explode(' '$dati,1); 
    //al posto di
    list($key$value) = explode(' '$dati); 
    si risolve anche il problema dello spazio nel cognome.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  9. #9
    una soluzione

    Codice PHP:

    function explode($key$array){

    echo 
    "3...2...1..."

    echo "<h1>BOOM!</h1>";

    return 
    "exploded";

    cmq opterei sul cambiamento della relazione nel database, togliendo la stringa...
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Per Grino: ovviamente il codice corretto è quello da te indicato per quanto riguarda l'explode.

    Ma tornando al problema anche io avrei optato per una query su valori separati e poi avrei ad esempio utilizzato una rottura di chiave in PHP, ma come in questo caso non sono io a decidere come strutturare i dati del database ma mi ritrovo i dati da manipolare così come sono.

    Detto ciò l'ultima soluzione proposta da Grino funziona correttamente.

    Grazie.
    ciao.

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.