2016-08-17 121 views
0

我想讀取一個CSV文件,並把它變成這樣的數組。如何忽略逗號與fgetcsv

$h = fopen("onderdelen-test.csv", "r"); 

echo '$parts = array('; 

if($h) { 
    while (($data = fgetcsv($h, 1000)) !== FALSE) { 
     foreach ($data as $num) { 
      $part = explode(';', "$num"); 

      echo "array('partid' => '$part[0]', "; 
      echo "'descr' => '$part[1]'), "; 
     } 
    } 
    fclose($h); 
} 

echo ')'; 

的CSV看起來像這樣

123456 ; partdescription 
234567 ; partdescription, anotherdescription 
345678 ; part, description and some other description 

的問題是,它也對爆炸逗號和不僅在分號。 我試過在描述中添加引號,但確實在描述中放了一些奇怪的問號,我無法擺脫。

編輯1: 如果我在fgetcsv函數中使用分號作爲分隔符,那麼我無法通過鍵檢索值,每次發現分號時都會啓動另一個循環。

+0

http://php.net/manual/en/function.fgetc sv.php第三個參數 - $ delimiter – ineersa

+2

@ineersa喜歡你殺死西方許多最快槍的方式:) – e4c5

+0

@ineersa加了我的那個在底部,我試過了,但是它每次開始一個新的循環 – Bart

回答

2

保持簡單,因爲所有你想取得進展,以更大的事情

123456 ; partdescription 
234567 ; partdescription, anotherdescription 
345678 ; part, description and some other description 

此代碼之前做的是看到的應該是這個輸入產生,請注意我已經添加了第三個參數fgetcsv

<?php 
$h = fopen("onderdelen-test.csv", "r"); 

if($h) { 
    while (($data = fgetcsv($h, 1000, ';')) !== FALSE) { 
     print_r($data); 
     echo "partid = " . trim($data[0]) . "\n"; 
     echo "descr = " . trim($data[1]) . "\n"; 
    } 
    fclose($h); 
} 

產生這樣的輸出

Array 
(
    [0] => 123456 
    [1] => partdescription 
) 
partid = 123456 
descr = partdescription 
Array 
(
    [0] => 234567 
    [1] => partdescription, anotherdescription 
) 
partid = 234567 
descr = partdescription, anotherdescription 
Array 
(
    [0] => 345678 
    [1] => part, description and some other description 
) 
partid = 345678 
descr = part, description and some other description 
+0

我嘗試了每一個我知道的'foreach'的可能性,但沒有正確的檢索數據。你能幫助我嗎? – Bart

+0

我的意思是我需要遍歷數組並執行一些查詢,但是當我使用普通的'foreach'然後嘗試值[鍵]我沒有得到我需要的值 – Bart

+0

對不起,我沒有看到你的回聲。這完全謝謝你!我想我只是過度複雜。 – Bart

0

簡單的代碼片段解析CSV文件:

$i=0; $keys=array(); $output=array(); 
    $handle=fopen("onderdelen-test.csv", "r"); 
    if ($handle){ 
     while(($line = fgetcsv($handle,0,';')) !== false) { 
      $i++; 
      if ($i==1) { 
       $keys=$line; 
      } elseif ($i>1){ 
       $attr=array(); 
       foreach($line as $k=>$v){ 
        $attr[trim($keys[$k])]=$v; 
       } 
       $output[]=$attr; 
      } 
     } 
     fclose($handle); 
    } 

    //$output here is your data array 

在這裏,你會得到csv文件關聯數組從文件的第一行鍵。

id ; description 
123456 ; partdescription 
234567 ; partdescription, anotherdescription 
345678 ; part, description and some other description 

結果數組:

Array 
(
    [0] => Array 
     (
      [id] => 123456 
      [description] => partdescription 
     ) 

    [1] => Array 
     (
      [id] => 234567 
      [description] => partdescription, anotherdescription 
     ) 

    [2] => Array 
     (
      [id] => 345678 
      [description] => part, description and some other description 
     ) 

) 

echo事情是有點真的錯了。

+0

您可能想要使其更容易讓初學者理解,特別是OP不使用類 – RiggsFolly

+1

@RiggsFolly可以隨意編輯如果有任何改進。刪除函數聲明。 – ineersa

+0

這也產生了一個奇怪的輸出。你可能想要測試它。它丟失了其中一個輸入行 – RiggsFolly