[PHP] Dividere un campo di testo in più campi

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buongiorno a tutti,
sono un po' arrugginito nell'utilizzo di php e mysql, ho cercato nel forum ma non sono riuscito a trovare quello che mi serve.
Ho un db MySql di ricette.
Uno dei campi contiene gli ingredienti, scritti così (unico campo, tipo text):
1 kg di cipolle
3 patate
.....

oppure:
cipolle [TAB] 1 kg
patate [TAB][TAB] n. 3
....

Ora dovrei dividere le singole righe di ingredienti inserendo in tre campi distinti quantità, unità di misura, ingrediente.
Poichè si tratta di un db piuttosto grande, vorrei evitare di fare il lavoro a mano.
Naturalmente va benissimo anche solo che la quantità vada nella colonna corretta (è sempre un numero), se poi dovesse ogni tanto invertirmi l'unità di misura con l'ingrediente non fa nulla, un po' di editing successivo andrà comunque fatto.

Da dove comincio? :)
Grazie per i suggerimenti.
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Per semplificare il problema, mi basterebbe estrarre il numero che poi metterei in un altra tabella insieme all'id della ricetta.
Potrei anche mettere il resto del testo in un altro campo della stessa tabella; poi farò una revisione manuale.
Questo semplificherebbe la cosa?
Grazie
Maurizio
 

zorro

Utente Attivo
20 Ott 2014
282
15
18
ROMA
Ciao Gandalf,
estrarre un numero da una stringa non è poi così complicato con preg_match: (ho fatto una prova con i due esempi
di stringa che avevi postato)

PHP:
$stringa = 'patate [TAB][TAB] n. 3';
if (preg_match('/[0-9]+/',$stringa,$result)) {
echo $stringa;
echo '<br>Quatità: '.$result[0];
}

per le unità di misura (è una soluzione un po' 'fatta in casa' ma funziona) dovresti inserirle tutte (kg,l,n) in questo modo

PHP:
$stringa = 'patate [TAB][TAB] n. 3';
if (preg_match('/[0-9]+/',$stringa,$result)) {
echo $stringa;
echo '<br>Quatità: '.$result[0];
}
if (preg_match('/[kg|gr|n.|l]+/',$stringa,$result)) {
echo '<br>Unità dsi misura: '.$result[0];
}

Sempre che abbia ben interpetato bene ciò che intendi fare
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Intanto grazie, applico, provo e poi ti aggiorno.
Quello che devo fare è splittare il contenuto del campo "Ingredienti" che al momento è un semplice campo di testo multiriga in tre "colonne" distinte (quantita, unita di misura, prodotto).
I tre dati ottenuti li butto in un'altra tabella del db insieme al codice della ricetta (tramite cui poi ricollegherò le informazioni).
Mi applico.
A presto
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Scusa una cosa...
il campo ha più righe, non una sola.
Riesco a dirgli che deve analizzare il testo riga per riga? Cioè quando trova un "A capo" diventa una nuova stringa?
 

zorro

Utente Attivo
20 Ott 2014
282
15
18
ROMA
Ma gli 'ingrerdienti' si trovano in una tabella o in un file TXT? Se si trovano in una tabella,. ad ogni riga letta valorizzi la stringa col contenuto del campo, altrimenti c'è una funzione (al momento non ricordo quale) che trasforma un fileTXT in un array
 

zorro

Utente Attivo
20 Ott 2014
282
15
18
ROMA
ho fatto delle prove su un campo mediumtext, preg_match cerca su tutto il campo (anche multiriga) solamente la prima occorrenza di un numero mentre se (come credo) il campo contiene più ingredienti, e quindi più numeri, devi usare preg_match_all. Dovresti farmi un esempio del campo
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Grazie.
il tipo di campo è "medium text" e un contenuto di esempio è il seguente:

Pasta strudel 450 gr
Carote 200 gr
Zucchine 200 gr
Porri 100 gr
Barbabietole 100 gr
Sedano 200 gr
Olio 140 gr
Vino bianco 3 dl
Panna di Soia 3 dl
Fondo di verdura 2 dl
Erba cipollina 20 gr
Sale
Pepe

Ti basta? Se serve altro chiedi pure...
 

zorro

Utente Attivo
20 Ott 2014
282
15
18
ROMA
Ciao Gandalf.,
scusa ma ho avuto parecchi problemi col computer; non so se nel frattempo hai risolto ma, nel dubbio, ti mando lo script.
Sicuramente qualcosa lo dovrai sistemare a mano. La difficoltà è mettere ogni ingrediente su una riga perchè, anche se nell'esempio che mi hai fornito sono ognuno su una riga, per il computer è un'unica, lunghissima variabile con tutti gli ingredienti uno di fianco all'altro. Però ho visto che ogni ingrediente inizia con la lettera maiuscola, quindi la riga è composta da una stringa compresa tra una lettera maiuscola e l'altra (tranne Panna d Soia che quindi lo devi scrivere tutto minuscolo) . Questo è lo script:

PHP:
$testo = 'Pasta strudel 450 gr
Carote 200 gr
Zucchine 200 gr
Porri 100 gr
Barbabietole 100 gr
Sedano 200 gr
Olio 140 gr
Vino bianco 3 dl
Panna di soia 3 dl
Fondo di verdura 2 dl
Erba cipollina 20 gr
Sale
Pepe';

echo $testo.'<br>';
preg_match_all('/[A-Z]/',$testo,$result);
 
$lettere = $result[0];
$nr_occ = count($lettere);
//echo $nocc;
echo '<br><br>';


for ($ind=0;$ind<$nr_occ;$ind++) {
     $posto = strpos($testo,$lettere[$ind+1]);
     $stringa = substr($testo,0,$posto);
     $testo = substr($testo,$posto);
     if ($ind==$nr_occ-1) {
         $stringa = $testo;
     }
     //echo $stringa.'<br>';
     $trovato = preg_match('/[0-9]+/',$stringa,$result);
     if ($trovato==1) {
         $posto = strpos($stringa,$result[0]);
         $ingrediente = substr($stringa,0,$posto);
     } else {
         $ingrediente = $stringa;
     }
     $quantita = $result[0];
     preg_match('/(gr|dl|kg|lt)/',$stringa,$result);
     $u_mis = $result[0];
     if ($quantita=='') {
          echo 'ingrediente: '.$ingrediente.'<br>';
     } else {
            echo 'ingrediente: '.$ingrediente.' quantita: '.$quantita.' unita di misura: '.$u_mis.'<br>';
     }
}


Zorro
 
Discussioni simili
Autore Titolo Forum Risposte Data
P [HTML] [PHP] dividere lo schermo in tre colonne HTML e CSS 110
redevilduil dividere la gallery in pagine con php PHP 3
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1

Discussioni simili