2013-05-01 105 views
3

我有一個csv文件上傳,我需要確定csv文件中有多少條目,並將第一列,中間列和最後一列格式化爲關聯數組$頭=> $值對。我有代碼格式化整個csv到陣列php從csv文件中只選擇第一列,中間列和最後一列

function csv_to_array($filename='', $delimiter=',') { 
    if(!file_exists($filename) || !is_readable($filename)){ 
     return FALSE; 
    } 

$header = NULL; 
$data = array(); 
if (($handle = fopen($filename, 'r')) !== FALSE) { 
    while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) { 
     if(!$header) { 
      $header = $row; 
     }else{ 
      $data[] = array_combine($header, $row); 
     } 
    } 

    fclose($handle); 
} 

    return $data; 
} 

然而,我堅持儘可能確定如何做到這一點。任何幫助,將不勝感激。有一件事可能是我想要的是使用上面的函數獲取數組,然後編寫一些其他函數來獲取該數組的開始中間和結尾,然後轉儲剩餘的數據(但仍然需要知道如何做到這一點。就決定開始中間和結尾

+0

之後加上以下'$ row = array($ row [0],$ row [floor(sizeof($ row)/ 2)], $行[的sizeof($行)-1]);' – Waygood 2013-05-01 16:30:05

回答

6

爲你的文件中讀取我會處理這個

// how many total columns 
$total = count($row); 

// get the halfway point (and round up if a decimal) 
$middle = ceil($total/2); 

// Form a new row using the first (0), last ($total-1) and middle ($middle) 
$new_row = array($row[0], $row[ $middle ], $row[ $total-1 ]); 

嵌入式代碼中:

function csv_to_array($filename='', $delimiter=',') { 
    if(!file_exists($filename) || !is_readable($filename)){ 
     return FALSE; 
    } 

$header = NULL; 
$data = array(); 
if (($handle = fopen($filename, 'r')) !== FALSE) { 
    while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) { 

     $total = count($row); 
     $middle = ceil($total/2); 
     $new_row = array($row[0], $row[ $middle ], $row[ $total-1 ]); 

     if(!$header) { 
      $header = $new_row; 
     }else{ 
      $data[] = array_combine($header, $new_row); 
     } 
    } 

    fclose($handle); 
} 

    return $data; 
} 

你可以減輕一些處理能力通過假定整個文件中的每一行都會有e相同的列數。如果是這樣,你只需要計數一次,就像這樣:

function csv_to_array($filename='', $delimiter=',') { 
    if(!file_exists($filename) || !is_readable($filename)){ 
     return FALSE; 
    } 

$header = NULL; 
$data = array(); 
if (($handle = fopen($filename, 'r')) !== FALSE) { 
    while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) { 

     if (!$total){ // Verify if we have the total yet, and if not: 
      $total = count($row); 
      $middle = ceil($total/2); 
     } 
     $new_row = array($row[0], $row[ $middle ], $row[ $total-1 ]); 

     if(!$header) { 
      $header = $new_row; 
     }else{ 
      $data[] = array_combine($header, $new_row); 
     } 
    } 

    fclose($handle); 
} 

    return $data; 
} 
相關問題