2012-05-23 4 views
3

CSV를 Json으로 변환하고 헤더 행을 키로 사용하고 각 행을 객체로 사용하고 싶습니다. 어떻게해야합니까?헤더 행을 키로 사용하여 CSV를 CSV로

---------------------------------- CSV ----------- ----------------------

InvKey,DocNum,CardCode 
11704,1611704,BENV1072 
11703,1611703,BENV1073 

--------------------- ------------ PHP -----------------------------------

if (($handle = fopen('upload/BEN-new.csv'. '', "r")) !== FALSE) { 
     while (($row_array = fgetcsv($handle, 1024, ","))) { 
      while ($val != '') { 
       foreach ($row_array as $key => $val) { 
         $row_array[] = $val; 
         } 
       } 
      $complete[] = $row_array; 
      } 
      fclose($handle); 
     } 
     echo json_encode($complete); 

답변

13

그냥 개별적으로 첫 번째 줄을 읽고 모든 행에 병합 :

if (($handle = fopen('upload/BEN-new.csv', 'r')) === false) { 
    die('Error opening file'); 
} 

$headers = fgetcsv($handle, 1024, ','); 
$complete = array(); 

while ($row = fgetcsv($handle, 1024, ',')) { 
    $complete[] = array_combine($headers, $row); 
} 

fclose($handle); 

echo json_encode($complete); 
+0

코드를 설명해 주시겠습니까? – MG1

+3

그것에 대해 무엇을 이해하지 못합니까? 그것은 파일 핸들을 열고, * 첫 행을 * $ headers로 읽어 들인 다음, 나머지 행을 읽는다. 그것은'$ headers'와 각 줄을 결합합니다. [array_combine] (http://php.net/array_combine)을 참조하십시오. – deceze

1

나 자신이 CS를 변환 발견 v 문자열을 배열 또는 객체에 몇 개월마다 저장합니다.

나는 게으르며 코드 복사/붙여 넣기를 좋아하지 않기 때문에 수업을 만들었습니다.

사용자 정의 클래스 객체에 CSV 문자열로 변환합니다이 클래스 : 철자 일을하고자하는 사람들을 위해

Convert csv string to arrays or objects in PHP

0

을 좀 더 + 더 추가 루프없이 행/열을 구문 분석하는 몇 가지 방 :

function csv_to_json_byheader($filename){ 
    $json = array(); 
    if (($handle = fopen($filename, "r")) !== FALSE) { 
     $rownum = 0; 
     $header = array(); 
     while (($row = fgetcsv($handle, 1024, ",")) !== FALSE) { 
      if ($rownum === 0) { 
       for($i=0; $i < count($row); $i++){ 
// maybe you want to strip special characters or merge duplicate columns here? 
        $header[$i] = trim($row[$i]); 
       } 
      } else { 
       if (count($row) === count($header)) { 
        $rowJson = array();      
        foreach($header as $i=>$head) { 
       // maybe handle special row/cell parsing here, per column header 
         $rowJson[$head] = $row[$i];      
        } 
        array_push($json, $rowJson); 
       } 
      } 
      $rownum++; 
     } 
     fclose($handle); 
    } 
    return $json; 
} 
관련 문제