Php 使用来自foreach的数据生成具有固定标题的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

我想从来自foreach循环的数据生成一个带有固定标题(名称、电子邮件、cod)的CSV文件。以下是我尝试过的,但还不起作用:

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

请参阅卓越的解决方案,谢谢。