2012-02-20 68 views
0

我现在使用此代码CSV数据导入到我的数据库额外的空白标题。(感谢弗朗西斯·阿维拉)修剪数据,并删除

if (($handle = fopen($source_file, "r")) !== FALSE) { 
    $columns = fgetcsv($handle, $max_line_length, ","); 
    $esc_columns = array(); 
    foreach ($columns as &$column) { 
     $column1 = str_replace(".","",$column); 
     $column = preg_replace("/\s*,\s*/",",",$column1); 
     $esc_columns[] = escapeSqlName($column); 
    } 

    $esc_columns[] = escapeSqlName('custgroup'); 
    $esc_columns[] = escapeSqlName('user_id'); 
    $esc_columns[] = escapeSqlName('mylabel'); 

    $x = preg_replace("/\s*,\s*/", ",", implode(',',$esc_columns)); 
    $xx = str_replace(' ', '', $x); 

    $sqlsmttempl = 'INSERT DELAYED INTO %s (%s) VALUES (%s)'; 
    $sqlsmt = sprintf($sqlsmttempl, 
     escapeSqlName($target_table), 
     $xx, 
     implode(',',array_fill(0, count($esc_columns), '?')) 
); 


    $db = new PDO("mysql:host=localhost;dbname=Data;","root",""); 

    $insert = $db->prepare($sqlsmt); 

    while (($data = fgetcsv($handle, $max_line_length, ",")) !== FALSE) { 
    while(count($data) < count($columns)) { 
     $data[] = NULL; 
    } 

    $data[] = $_POST['custgroup']; 
    $data[] = $_POST['user_id']; 
    $data[] = $_POST['mylabel']; 

    $insert->execute($data); 
} 

我面临的头部空白一些问题之前, ,所以我加了

 $x = preg_replace("/\s*,\s*/", ",", implode(',',$esc_columns)); 
    $xx = str_replace(' ', '', $x); 

所以现在空白区会被忽略。

但是数据中的空白怎么样?(只是在逗号前面和末尾)。我试过trim($data),但我知道这是错误的。

而且我不知道如何处理上载当标题包含其他额外的逗号,如:而不是仅仅Name,Address,Phone(正确)

任何意见,在此先感谢

Name,Address,Phone,,,,,(错)? 。

回答

3

这个问题可以通过使用RTRIM(字符串$海峡[,字符串$ charlist])来解决:

$x = preg_replace("/\s*,\s*/", ",", implode(',',$esc_columns)); 
$xx = str_replace(' ', '', $x); 
$xx = rtrim($xx,','); 

在PHP中您可以使用修边文:LTRIM(左修整),trim(修剪上双方),rtrim(右边修剪)。所有接受参数(字符串$海峡[,字符串$ charlist])$ STR - 输入字符串$ charlist - string要trimed

$xx = trim($xx); //exclude spaces both sides so for " text " => "text" 
$xx = ltrim($xx); //exclude spaces left side so for " text " => "text " 
$xx = rtrim($xx); //exclude spaces right side so for " text " => " text" 

$xx = rtrim($xx,','); //adding second parameter ',' will not trim spaces, will trim coma 

,只要你想你CAND添加许多命令:

$x = preg_replace("/\s*,\s*/", ",", implode(',',$esc_columns)); 
$xx = str_replace(' ', '', $x); 

$xx = trim($xx); //trim spaces from both sides 
$xx = trim($xx,','); //trim comas from both sides 

注:

$xx = trim($xx,','); //this is faster (only one function call) 

//equivalent with 
$xx = ltrim($xx,','); 
$xx = rtrim($xx,','); 
+0

感谢这个好的答案。对不起,但我可以再问一个问题吗?我怎样才能修剪和rtrim我的CSV数据呢? – 2012-02-20 18:32:31

+0

再次感谢。但$ xx是我的标题,我需要修剪的部分是以下数据。 – 2012-02-20 19:16:53