Autor | Zpráva | ||
---|---|---|---|
Medvídek Profil |
#1 · Zasláno: 22. 8. 2011, 14:41:45
Zdravím,
mám CSVčko, hodnoty jsou v uvozovkách a odděleny středníkem. Myslel jsem si, že si udělám klasicky explode řádků \n a poté explode středníků. Do půlky CSV to funguje a pak se objeví v textu mezi uvozovkami taky \n a ten mi celou strukturu rozhodí. echo "<pre>"; $data=array(); $file=file_get_contents("export.csv"); $file=explode("\n",$file); foreach($file AS $k => $v){ $obsah=explode(";",$v); foreach($obsah AS $key => $value){ $data[$k][$key]=$value; } } print_r($data); Dá se nějak u toho explode omezit, aby nebral hodnoty co jsou v uvozovkách? |
||
Mike8748 Profil |
#2 · Zasláno: 22. 8. 2011, 14:54:47
Medvídek:
nebylo by jednodušši $f=fopen('export.csv','r'); while ($radek=fgetcsv($f)) { $data[]=$radek; } print_r($data); |
||
Medvídek Profil |
#3 · Zasláno: 22. 8. 2011, 15:03:04 · Upravil/a: Medvídek
Mike8748:
Aha, fgetcsv() jsem neznal, díky. Já už se začal patlat s funkcí: $hledat="/\n(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/"; $data=preg_split($hledat,trim($files)); return preg_replace("/^\"(.*)\"$/","$1",$results); Tak vypadá, že to funguje, díky function csv_string_to_array($str){ $expr="/;(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/"; $results=preg_split($expr,trim($str)); return preg_replace("/^\"(.*)\"$/","$1",$results); } function assocToXML ($theArray, $tabCount=2) { $tabCount++; $tabSpace = ""; $extraTabSpace = ""; for ($i = 0; $i<$tabCount; $i++) { $tabSpace .= "\t"; } for ($i = 0; $i<$tabCount+1; $i++) { $extraTabSpace .= "\t"; } foreach($theArray as $tag => $val) { if (!is_array($val)) { $theXML .= PHP_EOL.$tabSpace.'<'.$tag.'>'.$val.'</'.$tag.'>'; } else { $tabCount++; $theXML .= PHP_EOL.$extraTabSpace.'<'.$tag.'>'.assocToXML($val, $tabCount); $theXML .= PHP_EOL.$extraTabSpace.'</'.$tag.'>'; } } return $theXML; } $f=fopen('../lang/'.$nazev,'r'); while ($radek=fgetcsv($f)) { $data[]=$radek; } foreach($data AS $key => $value){ $v=csv_string_to_array($value[0]); $m=explode("|",$v[1]); foreach($m AS $ke => $val){ if(count($m)==2) $d[$m[0]][$m[1]]=$v[0]; if(count($m)==3) $d[$m[0]][$m[1]][$m[2]]=$v[0]; } } $xml='<?xml version="1.0" encoding="UTF-8"?>'; $xml.='<conf>'; $xml.=assocToXML($d, 2); $xml.='</conf>'; @file_put_contents("../lang/lang".$_POST["jazyk"].".xml", $xml); |
||
Časová prodleva: 13 let
|
0