2017-09-15 100 views
0

我原來的CSV文件是這樣的:刪除引號,而寫CSV文件PHP

(ID, Country_code, Country, Address, Name, Age, Gender(1 or 0)) 
001, 1000, "America", "Washington DC", "(Mark", 25, 1 
002, 1000, "America", "Washington DC", "Joe", 25, 1 
003, 1000, "America, Washington DC", "Chantler)", 25, 1 
004, 1001, "Japan", "Tokyo", "(Tanaka", 26, 0 
005, 1001, "Japan", "Tokyo", "Satou)", 26, 0 

編碼我的CSV變成了這個樣子後:

(ID, Country_code, Country, Address, Name, Age, Gender) 

001, 1000, America, Washington DC, (Mark,Joe,Chantler), 25, "1 
" 
002, 1001, Japan, Tokyo, (Tanaka, Satou), 26, "0 
" 

它會自動包括年齡和引號創建不必要的行和年齡類別的引號。

我該如何解決這個問題?

下面是我的代碼(請忽略日語評論):

<?php 
$nl = "\n"; //New line 
$t = "\t"; //Tab space 
$line = array(); //Multidimensional array 
$result = array(); //Joint multidimensional array 
$num = 0; 
$num1 = 0; 
$output = array(); //Array convert from multidimension array to single array 
$output1 = array(); //Array merge of temp2 and test array 

$ar_1=file("KEN_ALL.CSV", FILE_IGNORE_NEW_LINES); 

foreach($ar_1 as $ar1) 
{ 
     $num1++; 
     $line[] = explode(',', $array); 
} 

for($i=0;$i<$num1);$i++) 
{ 
    for($j=0;$j<7;$j++) 
    { 
    while($j == 0) 
    { 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
    while($j == 1) 
    { 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
    while($j == 2) 
    { 
     $line[$i][$j] = str_replace(" ","", $line[$i][$j]); //データ値に空きスペースの削除 
     $line[$i][$j] = str_replace('"','', $line[$i][$j]); //データ値に' " 'の削除 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
    while($j == 3) 
    { 
     $line[$i][$j] = str_replace(" ","", $line[$i][$j]); //データ値に空きスペースの削除 
     $line[$i][$j] = str_replace('"','', $line[$i][$j]); //データ値に' " 'の削除 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
    while($j == 4) 
    { 
     $line[$i][$j] = str_replace(" ","", $line[$i][$j]); //データ値に空きスペースの削除 
     $line[$i][$j] = str_replace('"','', $line[$i][$j]); //データ値に' " 'の削除 
     $line[$i+1][$j] = str_replace(" ","", $line[$i+1][$j]); //データ値に空きスペースの削除 
     $line[$i+1][$j] = str_replace('"','', $line[$i+1][$j]); //データ値に' " 'の削除 
     $result[$num][$j] = $line[$i][$j].$line[$i+1][$j]; 
     $j++; 
    } 
    while($j == 5) 
    { 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
    while($j == 6) 
    { 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
} 
$i++; 
$num++; 
} 

function hensyu($v) 
{ 
    return implode(',', $v); 
} 

$output = array_map("hensyu", $result); 


$f_3 = fopen("output.csv") or die ("Unable to open file"); 
foreach($output as $array) 
{ 
    fputcsv($f_3, explode(',',$array)); 
} 
fclose($f_3); 
?> 
+0

請閱讀[在什麼情況下,我可以添加「緊急」或其他類似的短語到我的問題,以獲得更快的答案?](/ meta.stackoverflow.com/q/326569) - 總結是,這不是解決志願者問題的理想方式,而且可能對獲得答案起反作用。請不要將這添加到您的問題。 – halfer

+0

看起來我以前編輯過你的問題。請不要添加「希望得到幫助」,「請幫助我」,「需要儘快幫助」,「緊急」等形式的懇求。他們不能幫助你儘早得到答案,但他們可能會讓你低估。不要給志願者編輯更多的工作! – halfer

回答

1

我試圖運行你的腳本。它顯示了一些PHP錯誤和警告,我已經修復。

<?php 
$nl = "\n"; //New line 
$t = "\t"; //Tab space 
$line = array(); //Multidimensional array 
$result = array(); //Joint multidimensional array 
$num = 0; 
$num1 = 0; 
$output = array(); //Array convert from multidimension array to single array 
$output1 = array(); //Array merge of temp2 and test array 

$ar_1=file("KEN_ALL.CSV", FILE_IGNORE_NEW_LINES); 

foreach($ar_1 as $ar1) 
{ 
    $num1++; 
    $line[] = explode(',', $ar1); 
} 

for($i=0;$i<$num1;$i++) 
{ 
    for($j=0;$j<7;$j++) 
    { 
    while($j == 0) 
    { 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
    while($j == 1) 
    { 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
    while($j == 2) 
    { 
     $line[$i][$j] = str_replace(" ","", $line[$i][$j]); //データ値に空きスペースの削除 
     $line[$i][$j] = str_replace('"','', $line[$i][$j]); //データ値に' " 'の削除 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
    while($j == 3) 
    { 
     $line[$i][$j] = str_replace(" ","", $line[$i][$j]); //データ値に空きスペースの削除 
     $line[$i][$j] = str_replace('"','', $line[$i][$j]); //データ値に' " 'の削除 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
    while($j == 4) 
    { 
     $line[$i][$j] = str_replace(" ","", $line[$i][$j]); //データ値に空きスペースの削除 
     $line[$i][$j] = str_replace('"','', $line[$i][$j]); //データ値に' " 'の削除 
     $line[$i+1][$j] = str_replace(" ","", $line[$i+1][$j]); //データ値に空きスペースの削除 
     $line[$i+1][$j] = str_replace('"','', $line[$i+1][$j]); //データ値に' " 'の削除 
     $result[$num][$j] = $line[$i][$j].$line[$i+1][$j]; 
     $j++; 
    } 
    while($j == 5) 
    { 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
    while($j == 6) 
    { 
     $result[$num][$j] = $line[$i][$j]; 
     $j++; 
    } 
} 
$i++; 
$num++; 
} 

function hensyu($v) 
{ 
    return implode(',', $v); 
} 

$output = array_map("hensyu", $result); 


$f_3 = fopen("output.csv",'a+') or die ("Unable to open file"); 
foreach($output as $array) 
{ 
    fputcsv($f_3, explode(',',$array)); 
} 
fclose($f_3); 
?> 

並在此之後,它給輸出 -

(ID," Country_code",Country,Address,Name(Mark," Age"," Gender(1 or 0))" 
2,1000,America,WashingtonDC,JoeChantler),25,1 
4,1001,Japan,Tokyo,(TanakaSatou),26,0 

如果這個輸出是不正確的,讓我知道你所期望的輸出。

+0

我不需要輸出中的標題。我寫了標題僅供參考。我想要的輸出是這樣的: – Manish

+0

001,1000,美國,華盛頓特區,(Mark,Joe,Chantler),25,1
002,1001,日本東京(田中,Satou),26, – Manish

+0

Infact,我的csv輸出現在是這樣的: – Manish

0

fputcsv函數獲取一個數組作爲輸入。你應該這樣做:

fputcsv($f_3, $array);