PDA

Visualizza la versione completa : PROBLEMA con funzione php explode o split per convertire stringa in array. AIUTO!


speedcrash
07-04-2016, 13:23
salve
ho un problema con la funzione explode
devo creare un array partendo da un file csv che ha come delimitatore la virgola
strutturato in questo modo

prodotto,codice,quantita,prezzo
acqua,mg33,4 litri,12
colla,k334,"2,2 gr",15

per convertire uso la funzione:

$array = explode(",",$stringa);

o anche:

$array = split(",",$stringa);

ma il problema nasce per il contenuto della 3 riga nella 3 colonna che contiene la virgola ed è inserito automaticamente nei doppi apici e quando avvio la funzione il risultato per quella riga sballa

Come faccio a correggere la funzione che per quel determinato input possa avere un giusto output?

Ovviamente ora sto risolvendo correggendo a mano il file e variando il delimitatore ma mi occorre che la funzione php lavori sul file originario e non quello modificato da me

grazie mille a tutti

Alhazred
07-04-2016, 14:02
explode() e split() non possono essere "corrette", perché è così che funzionano, se vuoi seguire un tuo pattern devi usare un'espressione regolare appositamente scritta ed usarla con preg_split() (http://php.net/manual/en/function.preg-split.php).

P.S. quando fai copia/incolla di un messaggio preso da un altro sito, controlla cosa incolli, ti eri portato dietro un po' di link dall'altro sito su cui hai chiesto.

speedcrash
07-04-2016, 14:56
Alhazred scusami degli errori.

grazie mille della dritta sul preg_split()
provo a vedere come posso usare questa funzione ed adattarla per il mio uso

Complimenti per il forum...la sezione php la vedo davvero attiva!

badaze
07-04-2016, 22:58
Se puo' aiutare...




<?php
function my_replace($stringa) {
$pippo = "azertyuiop===dddd";
$pattern = '/"([^,]+)[,]([^"]+)"/';
$risultato = preg_replace($pattern,"\\1$pippo\\2",$stringa);
$array = explode(",",$risultato);

return str_replace($pippo,",",$array);
} // function my_replace($stringa)
$x = 'colla,k334,"2,2 gr",15,"01234, 0003",89,"ui,io"';
$mioArray = my_replace($x);
var_dump($mioArray);
?>

k.b
07-04-2016, 23:04
Usa questa funzione: http://php.net/str_getcsv

badaze
07-04-2016, 23:30
Usa questa funzione: http://php.net/str_getcsv
Non la conoscevo. Ci sono talmente tante funzioni che è difficile conoscerle tutte :-(

k.b
08-04-2016, 07:51
E' il bello di PHP :)

speedcrash
08-04-2016, 08:32
Wow ragazzi siete davvero fantistici! Non ho mai trovato un supporto cosi efficiente!

speedcrash
08-04-2016, 09:08
Wow ragazzi siete davvero fantistici! Non ho mai trovato un supporto cosi efficiente!

speedcrash
09-04-2016, 11:48
Se puo' aiutare...




<?php
function my_replace($stringa) {
$pippo = "azertyuiop===dddd";
$pattern = '/"([^,]+)[,]([^"]+)"/';
$risultato = preg_replace($pattern,"\\1$pippo\\2",$stringa);
$array = explode(",",$risultato);

return str_replace($pippo,",",$array);
} // function my_replace($stringa)
$x = 'colla,k334,"2,2 gr",15,"01234, 0003",89,"ui,io"';
$mioArray = my_replace($x);
var_dump($mioArray);
?>



Sapete dove posso trovare delle guide per creare dei pattern ad hoc?
come questo: /"([^,]+)[,]([^"]+)"/
che ha fatto +badaze
vorrei avere delle basi per crearli da soli con i delimitatori che mi occorrono.

Loading