2015-02-04 7 views
3

다차원 배열을 CSV 파일로 가져 오려고합니다. 내가 최고 수준의 모든 데이터를 얻을 수 있지만, 그때는 옵션 배열에 도달하면, 내가 Array to string conversion 오류가 발생할 수fputcsv를 사용하여 다차원 배열에서 CSV 만들기

Array 
(
[0] => Array 
    (
     [product_id] => 1111 
     [name] => Alcatel One Touch Idol 2 
     [keyword] => alcatel-one-touch-idol-2 
     [options] => Array 
      (
       [0] => Array 
        (
         [price] => 54.0000 
        ) 

       [1] => Array 
        (
         [price] => 42.0000 
        ) 

       [2] => Array 
        (
         [price] => 10.0000 
        ) 

       [3] => Array 
        (
         [price] => 
        ) 

       [4] => Array 
        (
         [price] => 
        ) 

       [5] => Array 
        (
         [price] => 
        ) 

       [6] => Array 
        (
         [price] => 
        ) 

       [7] => Array 
        (
         [price] => 
        ) 

       [8] => Array 
        (
         [price] => 
        ) 

       [9] => Array 
        (
         [price] => 
        ) 

      ) 

    ) 

[1] => Array 
    (...... etc) 

: 같은 배열의 데이터입니다. 그래서 두 가지 문제가 있습니다. 우선이 오류가 나타나는 이유를 알아야합니다. 그런 다음 제품마다 한 줄에이 정보를 모두 fputcsv해야합니다.

지금까지 나는이는 CSV로 배열을 구문 분석 할 수 있습니다 사람이 나를 도울 수 있다면

$output = fopen("php://output",'w') or die("Can't open php://output"); 
      header("Content-Type:application/csv"); 
      header("Content- Disposition:attachment;filename=product_catalog.csv"); 
      $first_line = explode(",", $first_line); 
      fputcsv($output, $first_line); 
      foreach($csv as $file) { 
       fputcsv($output, $file); 
      } 
      fclose($output) or die("Can't close php://output"); 

내가 정말 감사하겠습니다. 안부.

+0

그것은 * CSV로 *이 있습니까를? 수신 측에서 JSON을 대신 처리 할 수 ​​있습니까? JSON을 사용하면 배열의 구조가 유지되고 (병합되지 않음) 데이터의 재생성이 더 쉬워집니다. – DaveyBoy

답변

5

내가 먼저 각 배열을 평평하게 제안 : 각 반복에서

foreach ($csv as $file) { 
    $result = []; 
    array_walk_recursive($file, function($item) use (&$result) { 
     $result[] = $item; 
    }); 
    fputcsv($output, $result); 
} 

을이 같은 배열을 만들 것입니다 :

[1111, 'Alcatel One Touch Idol 2', 'alcatel-one-touch-idol-2', 54, 42, ...] 
+0

완벽하고 정확하게 필요한 부분. 고맙습니다! – jburley89

+0

@ jburley89 환영합니다. 오타 수정에 감사드립니다. P –