将对象的关联数组写入CSV - php

时间:2018-04-23 22:16:44

标签: php csv associative-array

我有关联数组' $ reportData'拥有' report_Modal'。

的对象

' report_Modal'的属性是:

private $unique_product_name;
private $min_price_quote;
private $max_price_quote;
private $mean_price_quote;
private $price_variation;
private $savings_potential;
private $vendor_name_OLP;

所有私有属性都存在所有setter和getter。

我想用CSV标题将所有对象写入CSV:

Product Name,Min Price,Max Price,Mean Price,Price Variation,Savings Potential,
Vendor Name OLP
Memory Card,110,200,142.5,1.03,0.23,Kingston
USB,125,230,171.5,1.02,0.27,Sandisk

P.S:我是php的新手

2 个答案:

答案 0 :(得分:1)

您需要一种动态访问私有属性列表的方法。以下是执行此操作的函数示例:

function toArray($report_modal, $properties) {
    return array_map(function($property) use ($report_modal) {
        return $report_modal->{'get_'.$property}();
        // modify according to how your methods are named
    }, $properties);
}

然后,如果您定义要获取的属性列表

$properties = [
    'unique_product_name',
    'min_price_quote',
    'max_price_quote',
    'mean_price_quote',
    'price_variation',
    'savings_potential',
    'vendor_name_OLP',
];

您可以迭代对象数组,将它们转换为数组,然后将它们输出为CSV。

foreach ($reports as $report) {
    fputcsv('outputfile.csv', toArray($report, $properties));
}

如果你可以修改类,你也可以在内部实现toArray方法。

答案 1 :(得分:0)

只需将对象数组转换为数组数组,然后使用this postthis

中的函数
<?php
$header = ['Product Name','Min Price','Max Price','Mean Price','Price Variation','Savings Potential','Vendor Name OLP'];
$finalArray = [$header];
foreach ($ascArray as $obj){
    $a = [];
    $a[] = $obj->get_unique_product_name();
    $a[] = $obj->get_min_price_quote();
    $a[] = $obj->get_max_price_quote();
    $a[] = $obj->get_mean_price_quote();
    $a[] = $obj->get_price_variation();
    $a[] = $obj->get_savings_potential();
    $a[] = $obj->get_vendor_name_OLP();

    $finalArray[] = $a;    
}