2017-09-25 12 views
1

다음과 같은 배열 $csvRows이 있습니다. 그 배열을 CSV로 내보내려고합니다. 개체의 다차원 배열을 CSV로 내보내기

Array 
(
    [0] => SingleModule Object 
     (
      [module:SingleModule:private] => Module Object 
       (
        [name:Module:private] => SimpleXMLElement Object 
         (
          [0] => some string 
         ) 

        [position:Module:private] => SimpleXMLElement Object 
         (
          [0] => 1000 
         ) 

        [config:Module:private] => SimpleXMLElement Object 
         (
         ) 

       ) 

      [moduleMeta:SingleModule:private] => ModuleMeta Object 
       (
        [description:ModuleMeta:private] => description text 
        [featureOrUseCase:ModuleMeta:private] => feature or usecase text 
        [inputParam:ModuleMeta:private] => input Parameter text 
        [changedParam:ModuleMeta:private] => changed Parameter text 
        [newOutputParam:ModuleMeta:private] => new Output Param text 
        [commentOrNote:ModuleMeta:private] => comments Or Note text 
       ) 

     ) 

    [1] => SingleModule Object 
     (etc...) 

나는 이미 내가 this link에서 발견 된 솔루션을 시도했다. 여기 내 코드 예제입니다 : 나는 일시적으로 수동으로 내가 this link에서 볼 수있는 다음과 같은 간단한 배열을 생성하여 문제를

PHP Recoverable fatal error: Object of class Module could not be converted to string ...in line where fputcsv is. 

해결 한 : 나는 다음과 같은 오류 얻을 그리고

$fileName = "../../data/modules.csv"; 
$output = fopen($fileName, 'w+'); 
foreach ($csvRows as $file) { 
    $result = [ ]; 
    array_walk_recursive($file, function ($item) use (&$result) { 
     $result [] = $item; 
    }); 
    fputcsv($output, $result); 
} 
fclose($output); 

$csvRows = array(
     array('row_1_col_1', 'row_1_col_2', 'row_1_col_3'), 
     array('row_2_col_1', 'row_2_col_2', 'row_2_col_3'), 
     array('row_3_col_1', 'row_3_col_2', 'row_3_col_3'), 
    ); 

그러나 내 실제 $csvRows 개체 배열을 CSV 형식으로 내보내고 싶습니다. 나는 초보자 프로그래머입니다. 그래서 어떤 제안이나 도움도 매우 감사 할 것입니다.

$str = json_encode($csvRows); 
$csvRows = json_decode($str, true); 
foreach ($csvRows as $file) { 
    $result = []; 
    array_walk_recursive($file, function($item) use (&$result) { 
     $result[] = $item; 
    }); 
    fputcsv($output, $result); 
} 

그냥 연관 배열에 모든 개체를 변환 :

+0

안녕, 나는 다음과 같은 당신의 제안을 시도 :'$ str을 =로 json_encode ($ csvRows를); $ csvRows = json_decode ($ str, true); $ fp = fopen ("../../ data/modules.csv", 'w +'); foreach ($ csvRows as $ column) { fputcsv ($ fp, $ column); } fclose ($ fp);'빈 csv 파일 만 있습니다. 어떤 생각? – sumion

답변

1

는 다음과 같은 솔루션을 사용해보십시오. 그런 다음 CSV에 배열을 추가하십시오. SingleModule 클래스에 JsonSerializable 인터페이스를 사용하여 다음과 같은 방법으로 구성 :

class SingleModule implements JsonSerializable { 
//YOUR CODE 
    public function jsonSerialize() { 
     return get_object_vars($this); 
    } 
} 
+0

안녕하세요, 다음과 같이 제안을 시도해 보았습니다 :'$ str = json_encode ($ csvRows); $ csvRows = json_decode ($ str, true); $ output = fopen ("../../ data/modules.csv", 'w +'); foreach ($ csvRows $ 파일) { $ 결과 = []; array_walk_recursive ($ file, function ($ item) use (& $ result) { $ result [] = $ item; }); fputcsv ($ output, $ result); }'하지만 빈 CSV 파일 만 있습니다. 어떤 생각? – sumion

+0

@IqbalNazir 그것은 객체의 모든 속성이 '비공개'이기 때문일 수 있습니다. 수업 외에서는 그것을 이용할 수 없습니다. – mega6382

+0

네, 맞습니다. 그것은 접근 수정자를'public'으로 변경할 때 작동합니다. 고마워. 그러나 나는 그 (것)들을 비공개로 유지하고 CSV로 내보낼 수도 있습니다. 어떤 생각? – sumion