2017-09-25 51 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找到。這裏是我的代碼示例:

$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); 

然後我收到以下錯誤:

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

我已經暫時通過手動創建一個簡單的數組像下面這樣,我在this link發現解決了這個問題:

$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。我是一個新手程序員,所以任何建議和幫助將不勝感激。

+0

嗨,我想你的建議如下所示:'$海峽= 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

請嘗試以下解決方案:

$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); 
} 

只是轉換所有這些對象關聯數組。然後將數組添加到CSV。使用上SingleModuleJsonSerializable接口,並配置以下方法:

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 as $ file){ $ result = []; array_walk_recursive($ file,function($ item)use(&$ result){ $ result [] = $ item; }); fputcsv($ output,$ result); }'但我只有一個空的csv文件。任何想法? – sumion

+0

@IqbalNazir它可能是由於對象的每個屬性都是「私人」的。你不能在課堂外訪問它。 – mega6382

+0

是的,你是對的。當我將訪問修改器改爲'public'時,它正在工作。感謝那。但我想保留它們的私密性,並將它們導出爲CSV。任何想法? – sumion