Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    303

    [MySQL] Estrarre dati numerici da un testo

    Ciao a tutti,
    ho un campo
    longtext in un database MySQL (usato da wordpress) contenente un testo, che all'interno contiene svariati tags, uno dei quali � di questo tipo:

    [TAG1 tipo="coordinate" latitudine="45.943600" longitudine="8.686690" tipo="mappa"]

    Ho creato una query che in base all'ID mi estrae tutto il testo, ma a me interesserebbero solo i due campi numerici "latitudine" e "longitudine", � fattibile?

    Grazie a tutti

  2. #2
    vuoi farlo da db (tipo: SELECT latitudine FROM ...) o da codice?

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    303
    Da codice... avevo iniziato con PHP ma riesco ad estrarre tutto il campo.

  4. #4
    allora fatti spostare in PHP , chiedi a un moderatore

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    303
    Spostato

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    in questo caso una regex torna utile
    Codice PHP:
    $pattern '/\"([\d.]+)\"/';
    $string '[TAG1 tipo="coordinate" latitudine="45.943600" longitudine="8.686690" tipo="mappa"]';

    preg_match_all($pattern$string$result);
    var_dump($result); 

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    303
    Grazie mille...

    L'ho appena testato e l'output è questo:



    array(2) {
    [0]=>
    array(2) {
    [0]=>
    string(11) ""45.943600""
    [1]=>
    string(10) ""8.686690""
    }
    [1]=>
    array(2) {
    [0]=>
    string(9) "45.943600"
    [1]=>
    string(8) "8.686690"
    }
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    303
    Ho fatto qualche modifica... il codice definitivo è questo, ho affinato leggermente la regex per funzionare funziona benissimo, spero di non essermi complicato la vita.

    Codice PHP:
    $contenuto '[TAG1 tipo="coordinate" latitudine="45.943600" longitudine="8.686690"';

    //prima estrazione
    $pattern '/\[TAG1 tipo="coordinate" latitudine="(?:\d*\.)?\d+" longitudine="(?:\d*\.)?\d+"/i';

    preg_match_all($pattern$contenuto$risultato_PRIMAPREG_SET_ORDER0);

    // estraggo il valore
    $secondo $risultato_PRIMA[0][0]; // estrae tutto il blocco [TAG1 tipo="coordinate" latitudine="XXX" longitudine="YYY" 

    // estrazione del blocco latitudine
    $pattern_LATITUDINE '/latitudine="(?:\d*\.)?\d+"/i';
    preg_match_all($pattern_LATITUDINE$secondo$risultato_LATITUDINEPREG_SET_ORDER0);
    $latitudine_totale $risultato_LATITUDINE[0][0]; // estrae: latitudine="XXX"

    // estrazione del blocco longitudine
    $pattern_LONGITUDINE '/longitudine="(?:\d*\.)?\d+"/i';
    preg_match_all($pattern_LONGITUDINE$secondo$risultato_LONGITUDINEPREG_SET_ORDER0);
    $longitudine_totale $risultato_LONGITUDINE[0][0];  // estrae: longitudine="XXX"

    // estrazione dei soli valori numerici di latitudine e longitudine
    $pattern_NUMERO '/(?:\d*\.)?\d+/';

    // estrazione valore numerico latitudine
    preg_match_all($pattern_NUMERO$latitudine_totale$latitudinePREG_SET_ORDER0);

    // estrazione valore numerico longitudine
    preg_match_all($pattern_NUMERO$longitudine_totale$longitudinePREG_SET_ORDER0);

    echo 
    " LAT: " $latitudine[0][0] . " LON: " " " $longitudine[0][0]; 
    Ultima modifica di carloscara; 21-06-2017 a 12:47

  9. #9
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    non sono un grande esperto di espressioni regolari, ma se nel tuo primo pattern correggi come qua sotto, dovresti avere già i valori dei tag "longitudine" e "latitudine" nell'array che ti restuisce preg_match_all

    Codice PHP:
    $pattern '/\[TAG1 tipo="coordinate" latitudine="(\d*\.?\d+)" longitudine="(\d*\.?\d+)"/i'
    tu invece fai la stessa cosa due volte e non mi sembra molto efficiente

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    303
    Hai ragione... non riuscivo a estrarre i dati singolarmente e avevo fatto tutto quel giro, probabilmente sbagliavo qualcosa nell'estrazione dei valori dall'array.
    Adesso ho rivisto il codice ed funziona tutto correttamente.
    Questo è il codice
    Codice PHP:
    $contenuto '[TAG1 tipo="coordinate" latitudine="45.943600" longitudine="8.686690"';

    //estrazione
    $pattern '/\[TAG1 tipo="coordinate" latitudine="(\d*\.?\d+)" longitudine="(\d*\.?\d+)"/i';

    preg_match_all($pattern$contenuto$risultato_PRIMAPREG_SET_ORDER0);
    // estraggo i due valori
    echo "LAT: " $risultato_PRIMA[0][1] . "LON: " $risultato_PRIMA[0][2] ; 
    Così dovrebbe essere ok


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 © 2024 vBulletin Solutions, Inc. All rights reserved.