我有一个数组$csvRows
,如下所示。我想将该数组导出为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 :(得分: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。在JsonSerializable
类上使用SingleModule
接口并配置以下方法:
class SingleModule implements JsonSerializable {
//YOUR CODE
public function jsonSerialize() {
return get_object_vars($this);
}
}