【问题标题】:Send array keys and values to csv using php使用 php 将数组键和值发送到 csv
【发布时间】:2017-08-26 14:44:17
【问题描述】:

所以我需要我的所有数组键成为 excel 电子表格中的第一列(第 0 列),并且数组的值将用于填充 csv 文件的其余列(第 1-5 列) )。

看下面的例子

代码:

        $array = array();

        foreach($k["Time)"] as $key => $value)
        {
            $array[] = [$value];                  
        }

        print_r($array);


        $file = fopen('demosaved.csv', 'w');




        fputcsv($file, array('Column 0','Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 5'));


        $data = array_values($array);

        foreach ($data as $row)
        {
          fputcsv($file, $row);
        }

        fclose($file);

我也尝试了以下并收到此错误“数组到字符串转换”:

        foreach($k["Time Series (1min)"] as $key => $value)
        {
            $array[] = [$key, $value];
        }


        var_dump($array);


        $file = fopen('demosaved.csv', 'w');




        fputcsv($file, array('Column 0','Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 5'));


        $data = $array;


        foreach ($data as $row)
        {
          fputcsv($file, $row);
        }

        fclose($file);

【问题讨论】:

  • 那么到底是什么不工作?
  • 仅将数组值打印到 csv,我无法将数组键打印到第 0 列以及将数组值打印到第 1-5 列
  • 你能显示var_dump($array)的输出吗?这将极大地帮助找出问题所在。
  • 数组 ( [0] => 数组 ( [0] => 2017-08-25 16:00:00 [1] => 数组 ( [1. open] => 141.9550 [2.高] => 141.9800 [3. 低] => 141.9200 [4. 收盘] => 141.9700 [5. 成交量] => 978667) ) [1] => 数组 ([0] => 2017-08-25 15: 59:00 [1] => 数组 ( [1. open] => 142.0200 [2. high] => 142.0300 [3. low] => 141.9500 [4. close] => 141.9575 [5. volume] => 369713 ) )
  • 我不知道你是否已经看到我的答案,但我更新了你的数组。希望这就是你想要的。我最终测试了它并且它有效。

标签: php arrays json csv


【解决方案1】:

获取正确的元素

所以我们在这里使用的是 3 维数组,而不是二维数组,我认为这是您的困惑所在。

// output of var_dump($array)
Array ( 
[0] => Array ( 
    [0] => 2017-08-25 16:00:00   // Column 0
    [1] => Array ( 
        [1. open] => 141.9550    // Column 1
        [2. high] => 141.9800    // Column 2
        [3. low] => 141.9200     // Column 3
        [4. close] => 141.9700   // Column 4
        [5. volume] => 978667    // Column 5
    ) 
) 
[1] => Array ( 
    [0] => 2017-08-25 15:59:00 
    [1] => Array ( 
        [1. open] => 142.0200 
        [2. high] => 142.0300 
        [3. low] => 141.9500 
        [4. close] => 141.9575 
        [5. volume] => 369713 
    ) 
)

修复这个问题,你需要像这样修改最后一个循环:

foreach ($data as $row)
{
    $rowData = array_merge(array($row[0]), $row[1]); // this will flatten your array to one dimension
    fputcsv($file, $rowData);
}

【讨论】:

  • 警告:array_merge(): Argument #1 is not an array in C:\xampp\htdocs\testing\test2.php on line 49 警告:fputcsv() 期望参数 2 为数组,null在第 50 行的 C:\xampp\htdocs\testing\test2.php 中给出
  • 我的错,我在我的编辑器上发现了这个但忘了把它放在答案中。我在修复中编辑
  • @user7104290 没问题 :)
【解决方案2】:

通常当我创建 CSV 文件时,我只有一个数组:

$array = array(
    array( 'a' => '1', 'b' => '2', 'c' => '3' ),
    array( 'a' => '4', 'b' => '5', 'c' => '6' ),
    array( 'a' => '7', 'b' => '8', 'c' => '9' ),
);

$file = fopen('demosaved.csv', 'wb');

fputcsv( $file, array_keys( $array[0] ) );

foreach( $array as $row )
{
    fputcsv( $file, array_values( $row ) );
}

fclose( $file );

但是如果你有一个单独的数组用于标题行和值:

$header = array(
    'foo', 'bar', 'baz'
);

$values = array(
    array( 'a' => '1', 'b' => '2', 'c' => '3' ),
    array( 'a' => '4', 'b' => '5', 'c' => '6' ),
    array( 'a' => '7', 'b' => '8', 'c' => '9' ),
);

$file = fopen('demosaved.csv', 'wb');

fputcsv( $file, $header );

foreach( $values as $row )
{
    fputcsv( $file, array_values( $row ) );
}

fclose( $file );

这当然可以通过使用简单的数组来简化,但是您应该能够轻松地传递数据。

最后,在你的情况下:

$array = array(
    array(
        '2017-08-25 16:00:00',
        array(
            '1.open' => 141.9550,
            '2.high' => 141.9800,
            '3.low' => 141.9200,
            '4.close' => 141.9700,
            '5.volume' =>978667
        )
    ),
    array(
        '2017-08-25 15:59:00',
        array(
            '1.open' => 142.0200,
            '2.high' => 142.0300,
            '3.low' => 141.9500,
            '4.close' => 141.9575,
            '5.volume' => 369713
        )
    ),
);

$file = fopen('demosaved.csv', 'wb');

fputcsv( $file, array_keys( $array[0][1] ) );

foreach( $array as $row )
{
    fputcsv( $file, array_values( $row[1] ) );
}

fclose( $file );

您也可以这样做,将日期添加到第一列:

$array = array(
    array(
        '2017-08-25 16:00:00',
        array(
            '1.open' => 141.9550,
            '2.high' => 141.9800,
            '3.low' => 141.9200,
            '4.close' => 141.9700,
            '5.volume' =>978667
        )
    ),
    array(
        '2017-08-25 15:59:00',
        array(
            '1.open' => 142.0200,
            '2.high' => 142.0300,
            '3.low' => 141.9500,
            '4.close' => 141.9575,
            '5.volume' => 369713
        )
    ),
);

$file = fopen('demosaved.csv', 'wb');

$header_row = array_merge( array('Date' => NULL), $array[0][1] );

fputcsv( $file, array_keys( $header_row ) );

foreach( $array as $row )
{
    array_unshift( $row[1], $row[0] );
    fputcsv( $file, array_values( $row[1] ) );
}

fclose( $file );

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 2019-04-05
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    相关资源
    最近更新 更多