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



我有关联阵列'$ 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;

所有私人属性都存在所有设置器和getter。

我想用标头写所有对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

您需要一种动态访问私人属性列表的方法。这是执行此功能的函数的示例:

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方法。

只需将您的对象数组转换为数组数组,然后使用此帖子中的函数或此

<?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;    
}

最新更新