Php 使用来自foreach的数据生成具有固定标题的CSV
我想从来自foreach循环的数据生成一个带有固定标题(名称、电子邮件、cod)的CSV文件。以下是我尝试过的,但还不起作用:Php 使用来自foreach的数据生成具有固定标题的CSV,php,Php,我想从来自foreach循环的数据生成一个带有固定标题(名称、电子邮件、cod)的CSV文件。以下是我尝试过的,但还不起作用: $parcels = array(); $parcels = array('name','email', 'cod'); foreach ($orders as $order_id) { $order_info = $this->model_sale_order->getOrder($order_id); $pa
$parcels = array();
$parcels = array('name','email', 'cod');
foreach ($orders as $order_id) {
$order_info = $this->model_sale_order->getOrder($order_id);
$parcels[] = $order_info['shipping_firstname'] . ' ' . $order_info['shipping_lastname'],
$parcels[] = $order_info['email'],
//if empty write null, else write value
$parcels[] = empty($this->request->post['cod'][$order_id]) ? '' : $this->request->post['cod'][$order_id],
}
$fp = fopen('php://output', 'wb');
foreach ( $parcels as $line ) {
$val = explode(",", $line);
fputcsv($fp, $val);
}
fclose($fp);
因为
$line
不包含“行”,而是包含“单元格”
如果要在写入文件之前将所有数据存储在内存中,则需要多维数组
您可以在循环中存储一个数组,然后将其添加到$parcels
中
$parcels = [['name','email', 'cod']]; // first line
foreach ($orders as $order_id) {
$order_info = $this->model_sale_order->getOrder($order_id);
$line = [];
$line[] = $order_info['shipping_firstname'] . ' ' . $order_info['shipping_lastname'];
$line[] = $order_info['email'];
//if empty write null, else write value
$line[] = empty($this->request->post['cod'][$order_id]) ? '' : $this->request->post['cod'][$order_id];
$parcels[] = $line; // add the line into `$parcels`
}
foreach ( $parcels as $line ) {
// no need to explode here
fputcsv($fp, $val);
}
注意:注意,在某些行的末尾有一些,
,它们必须是代码>
您也可以在一个循环中完成:
$fp = fopen('php://output', 'wb');
fputcsv($fp, ['name','email', 'cod']);
foreach ($orders as $order_id)
{
$order_info = $this->model_sale_order->getOrder($order_id);
$line = [];
$line[] = $order_info['shipping_firstname'] . ' ' . $order_info['shipping_lastname'];
$line[] = $order_info['email'];
//if empty write null, else write value
$line[] = empty($this->request->post['cod'][$order_id]) ? '' : $this->request->post['cod'][$order_id];
fputcsv($fp, $line);
}
fclose($fp);
请参阅卓越的解决方案,谢谢。