将多个数组作为列保存到csv文件中

时间:2018-08-07 13:40:14

标签: php arrays csv

我想在一个输出csv中编写多行数组,其中每个数组代表一列。如果我使用两个循环,则输出将低于firt循环的输出。

我的代码是:

$fp = fopen('output.csv','w');

foreach ($ordernumber as $line)  {
    fputcsv($fp,explode(',',$line));
}

foreach ($currency as $line)  {
    fputcsv($fp,explode(',',$line));
} 

fclose($fp);

,这里是输出:

item_sku
1126204
1126220
1126230
1126250
1126252
1126256
1126257
1126258
1126260
1126261
1126116.54
currency
EUR
EUR
EUR
EUR
EUR
EUR
EUR
EUR
EUR
EUR
EUR
EUR

所以,但是我需要并排输出-像普通的csv文件一样。

有人对我有起点吗?

3 个答案:

答案 0 :(得分:3)

假设两个数组中的行彼此匹配,即行1 =行1,则必须在一个循环中进行操作。一种方法是使用您正在处理的数组的索引来访问另一个数组。

$fp = fopen('output.csv','w');

// add col headings    
fputcsv($fp,[ 'item_sku','currency' ]);

foreach ($ordernumber as $idx => $line)  {
    fputcsv($fp,[ $line,$currency[$idx] ]);
}
  

但是我首先要看一下如何设法生成两个包含相关数据但不是同一数组的数组并对其进行修复

答案 1 :(得分:0)

这是一种方法,您必须为每行创建一个数组,然后将其放入csv:

//first create a array like this.
//manually
$mycsv[1] = array('EUR', '1126261');
$mycsv[2] = array('EUR', '1128961');
$mycsv[3] = array('EUR', '1126791');

//programitically; assuming both array are equally based on line by line rows
$mycsv = array();
for ($i=0;$i<count($arr1);$i++){
     $mycsv[$i] = array($arr1[$i],$arr2[$i]);
}

$fp = fopen('output.csv','w');
foreach ($mycsv as $line) {
   fputcsv($fp, $line, ',');
}
fclose($fp);

答案 2 :(得分:0)

要完成@RiggsFolly答案,如果您的数组没有相同的索引,则可以执行以下操作:

// Check your two arrays have the same size
if (count($ordernumber) === count($currency)) {

    $fp = fopen('output.csv','w');
    foreach ($ordernumber as $line)  {
        fputcsv($fp, [$line, array_shift($currency)]);
    }
    fclose($fp);
}