[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
322
21
28
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
322
21
28
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
322
21
28
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
322
21
28
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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
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

Discussioni simili