将数组添加到csv文件中-同一行中不同列的两个数组值

时间:2019-12-03 10:54:49

标签: php

我有一个php页面,它正在创建一个要下载的csv文件,该文件由数组组成。 Array的简短版本:

$data = array("Joe Bloggs", "jbloggs", "John Doe", "jdoe")

我的数组是由其他命令的输出制成的,所以我不能只更改数组的布局,如果可以帮助实现我的目标,我可以创建两个数组,一个用于名称,一个用于用户名。

这是我将数组值添加到csv文件中的操作:

$output = fopen('php://output', 'wb');
fputcsv($output, array('Name', 'Username'));
foreach ($data as $line ) {
    $val = explode(",", $line);
    for ($i=0; $i<$val["count"]; $i++); {

    fputcsv($output , array($val[$i])); 
    }
}

fclose($output);

这给了我一个看起来像这样的csv:

Name      | Username
Joe Bloggs|
jbloggs   |
John Does |
jdoe      |

真的,我需要在同一行但在“用户名”列中输入用户名。 我已经尝试过这个方法并且对此进行了很多修改,但是它似乎不起作用,我的想法是我每次将N增加2,所以$ i将是名称,因为它是所有其他索引位置,然后在执行fputcsv时在$ i中加1,这样它将捕获用户名,因为它是名称后的值。

foreach ($data as $line ) {
    $val = explode(",", $line);
    for ($i=0; $i<$val["count"]; $i+=2); {

    fputcsv($output , array($val[$i], $val[$i+1])); 
    }
}

fclose($output);

使用以上内容,我仍然可以看到第一列中的所有值。

很抱歉写我的代码样式问题,但是我对此不甚了解,无法找到如何在数组的for循环中获得两个连续的值。

2 个答案:

答案 0 :(得分:1)

这里有1种方法。

$output = fopen('php://output', 'wb');
fputcsv($output, array('Name', 'Username'));

$temp = []; //Define a temp array.
foreach ($data as $line ) {
    $temp[]= $line;
    if( count( $temp) == 2 ) { //If no. of values in temp array is 2, write to csv file
        fputcsv($output , $temp );
        $temp = []; //initialize $temp;
    }
}

fclose($output);

答案 1 :(得分:1)

尽管可以回答,但以下原因导致“数组不均匀”:

<?php
$output = fopen('php://output', 'wb');
fputcsv($output, ['Name', 'Username']);

$data = ['Joe Bloggs', 'jbloggs', 'John Doe', 'jdoe', 'Straggler'];

foreach (array_chunk($data, 2) as $lineItems) {
    fputcsv($output, $lineItems);
}

fclose($output);

示例:https://3v4l.org/XJugB