2009-10-23 72 views
0

的目的閱讀和格式化CSV數據和數組在PHP

要讀取csv文件,並且每個線分離成一個數組。第一行(字段名稱)顯示一次,然後遍歷剩餘的數據。

我有這個功能打開和爆炸CSV文件

$myFile = "csv.csv"; 
$fh = fopen($myFile, 'r'); 
$theData = fread($fh, filesize($myFile)); 
fclose($fh); 
$csv = explode(",", $theData); 

這是有問題的CSV文件

id,sub,type,regprice,natprice 
1,4,Team,40,75 
2,4,Individual,15,35 
3,4,Stunt Group,50,150 
4,4,Coed Partner Stunt,50,150 

我需要知道如何做的,就是加載的第一行分別放入一個數組中,然後按照以下方式遍歷剩餘的數組。

Array[0][0] - Array[0][1] - Array[0][2] - Array[0][3] - Array[0][4] 
------------------------------------------------------------------- 
Array[1][0] - Array[1][1] - Array[1][2] - Array[1][3] - Array[1][4] 
Array[2][0] - Array[2][1] - Array[2][2] - Array[2][3] - Array[2][4] 
Array[3][0] - Array[3][1] - Array[3][2] - Array[3][3] - Array[3][4] 
Array[4][0] - Array[4][1] - Array[4][2] - Array[4][3] - Array[4][4] 

回答

0

我發現這個工作

我添加/在CSV線的端部。

$myFile = "csv.csv"; 
$fh = fopen($myFile, 'r'); 
$theData = fread($fh, filesize($myFile)); 
fclose($fh); 
$csvpre = explode("/", $theData); 
$i = 1; 
    foreach ($csvpre AS $key => $value){ 
     $info = explode(",", $value);  
      if($i == "1"){ 
       echo "$info[0] - $info[1] - $info[2] - $info[3] - $info[4]<br>"; 
       $i++; 
       } else { 
       echo "<span style=\"color:#ff0000;\">$info[0] - $info[1] - $info[2] - $info[3] - $info[4]</span><br>"; 
      }  
    } 
6

fgetcsv()可能會爲你做這一切。

+0

而文件()也將有所幫助。 –

+1

@eyze fgetcsv()從fopen()獲取資源句柄。如果你真的需要自己分解csv列,file()是一個可靠的選擇,因爲它會返回一個表示每一行的數組字符串。 –

+2

你可以混合文件()與str_getcsv():) –

2

試試這個:

foreach ($csv as $i=>$row) { 
    $rowStr = implode(' - ',$row)."\n"; 
    print($rowStr); 
    if ($i == 0) { 
    print(str_repeat('-',strlen($rowStr))."\n"); 
    } 
} 

編輯:固定的語法錯誤。

1
<?php 
$myFile = "csv.csv"; 
$fh = fopen($myFile, 'r'); 
$headers = fgetcsv($fh); 
$data = array(); 
while (! feof($fh)) 
{ 
    $row = fgetcsv($fh); 
    if (!empty($row)) 
    { 
     $obj = new stdClass; 
     foreach ($row as $i => $value) 
     { 
      $key = $headers[$i]; 
      $obj->$key = $value; 
     } 
     $data[] = $obj; 
    } 
} 
fclose($fh); 
print_r($data); 
?> 

這將輸出:

Array 
(
    [0] => stdClass Object 
     (
      [id] => 1 
      [sub] => 4 
      [type] => Team 
      [regprice] => 40 
      [natprice] => 75 
     ) 

    [1] => stdClass Object 
     (
      [id] => 2 
      [sub] => 4 
      [type] => Individual 
      [regprice] => 15 
      [natprice] => 35 
     ) 

    [2] => stdClass Object 
     (
      [id] => 3 
      [sub] => 4 
      [type] => Stunt Group 
      [regprice] => 50 
      [natprice] => 150 
     ) 

    [3] => stdClass Object 
     (
      [id] => 4 
      [sub] => 4 
      [type] => Coed Partner Stunt 
      [regprice] => 50 
      [natprice] => 150 
     ) 

) 
0
$file_array=file('csv.csv'); 
$lines=count($file_array); 

$first_line=explode(',',$file_array[0]); 
$fl_text=implode(' - ',$first_line);  
echo $fl_text.'<br>'; 

for($i=1;$i<$lines;$i++) 
    { 
    $line_text=str_replace(',',' - ',$file_array[$i]); 
    echo '<span style="color:#ff0000;">'.$line_text.'</span><br>'; 
    } 

這其中包括一對夫婦的方式打印出來的線條,而無需爆炸每一個。你可以用str_replace替換'''空格,或者你可以爆炸然後爆炸。可能str_replace更有效率。

另外,file()命令將文件的每一行讀入數組中的值。