嗨進出口試圖使一個函數,它在一個CSV文件,然後將其插入文件whitch作品,但沒有什麼,我需要做的。PHP使preg_split爲逗號而不是在雙引號
在我使用爆炸擺脫文件行的時刻..
explode(",", $linearray);
這workes但如果有類似
field1,field2,field3,field4,"some text, some other text",field6
我得到這個數組
array(
[0]=>field1,
[1]=>field2,
[2]=>field3,
[3]=>field4,
[4]=>"some text,
[5]=>some other text",
[6]=>field6
)
這不是我想要的結果。我知道preg_split可以爲我做,但我不擅長正則表達式。 我想要的結果是。
field1,field2,field3,field4,"some text, some other text",field6
array(
[0]=>field1,
[1]=>field2,
[2]=>field3,
[3]=>field4,
[4]=>some text, some other text,
[5]=>field6
)
請大家幫忙。從PHP類
功能CSV文件我已經寫
$lineseparator = "\n";
$fieldseparator = "\n";
function ReadFile(){
$this->csvcontent = fread($this->_file,$this->size);
fclose($this->_file);
return ($this->csvcontent)? true : false ;
}
function InsertFileToSQL(){
$query = "";
$i_count = 0;
$queries = "";
$linearray = array();
$file_array = explode($this->lineseparator,$this->csvcontent);
$lines = count($file_array);
foreach($file_array as $key => $value) {
$value = trim($value," \t");
$value = str_replace("\r","",$value);
/***********************************************************************************************************
This line escapes the special character. remove it if entries are already escaped in the csv file
************************************************************************************************************/
$value = str_replace("'","\'",$value);
$value = str_replace("\"","",$value);
/***********************************************************************************************************/
$linearray = explode($this->fieldseparator,$value);
foreach($linearray as $key2 => $value2){
// Format all fields that match a date format the Reformat for SQL.
$date = explode("/", $value2);
if(count($date) == 3){
$linearray[$key2] = $date[2]."-".$date[1]."-".$date[0];
}
}
$linemysql = implode("','",$linearray);
if($linemysql != "" && $linemysql != NULL){
if($this->csvheader){
if($key != 0){
if($this->addauto == 1){
$query = "INSERT INTO `$this->db_table` VALUES (NULL,'$linemysql');";
}else{
$query = "INSERT INTO `$this->db_table` VALUES ('$linemysql');";
}
}else{
$lines--;
}
$insert = mysql_query($query) or die(mysql_error());
if($insert){
$queries .= $query . "\n";
$i_count++;
}
}else{
if($this->addauto == 1){
$query = "INSERT INTO `$this->db_table` VALUES (NULL,'$linemysql');";
}else{
$query = "INSERT INTO `$this->db_table` VALUES ('$linemysql');";
}
$insert = mysql_query($query) or die((mysql_error()." in QUERY: ".$query));
if($insert){
$queries .= $query . "\n";
$i_count++;
}
}
}else{
$this->null_row++;
$lines--;
}
}
if($this->save) {
$f = fopen($this->output_location.$this->outputfile, 'a+');
if ($f) {
@fputs($f, $queries);
@fclose($f);
}else{
echo("Error writing to the output file.", 'error');
}
}
$lines--;//fix array count
$text = "";
if($i_count - $this->null_row != 0){$i_count = $i_count - $this->null_row ;$text .= "<br>$i_count Records were inserted Successfully.";}
echo("Found a Total of $lines Record(s) in this csv file.<br>$this->null_row Record(s) were/are Blank or Null.$text", 'success');
}
str_getcsv()更適合這個 - http://www.php.net/manual/en/function.str-getcsv.php;或者如果您正在從CSV文件中讀取數據,請使用fgetcsv() - http://www.php.net/manual/en/function.fgetcsv.php – 2013-05-10 12:28:24
http://stackoverflow.com/questions/2805427/how提取數據從csv-file-in-php記住找一個已經問過同樣問題的人! – 2013-05-10 12:29:16
我知道有很多問題,但沒有我需要的答案。在CSV文件上的PHP函數可以正常工作,但在服務器上不正確。那爲什麼我要求正則表達式的方式,因爲這是一個解決方法,直到服務器問題得到解決。 – MasterT 2013-05-10 12:37:26