尝试在php中从数组构建.csv文件

yh2wf1be  于 2023-02-18  发布在  PHP
关注(0)|答案(1)|浏览(91)

我试图将下面的数组转换为.csv文件,其中问题将在第一行,相应的答案在第二行,在开始时,时间戳应该与时间在沿着。
我试过以下几种方法:

<?php

  $qna = [
    [
      "questionNo"=> 1,
      "question"=> "I am the life of the party.",
      "answer"=> 2
    ],
    [
      "questionNo"=> 2,
      "question"=> "I feel little concern for others.",
      "answer"=> 4
    ],
    [
      "questionNo"=> 3,
      "question"=> "I am always prepared.",
      "answer"=> 2
    ],
    [
      "questionNo"=> 4,
      "question"=> "I get stressed out easily.",
      "answer"=> 4
    ]
  ];
  
  $csv = '/home/ankur/Desktop/iq_data.csv';
  $fp = fopen( $csv , 'w' );
  $questionarray = array();
  $answerarray = array();
  $keyarray = array();
  $valuearray = array();
  foreach( $qna as $key => $questions) {
   
   $questionarray[]  = $questions['question'];
   $answerarray[]    = $questions['answer'];
  }
  $keyarray[] = "Timestamp";
  $valuearray[] = time();
  
  $row = array();
  array_push($row,$keyarray);
  array_push($row,$valuearray);
  array_push($row,$questionarray);
  array_push($row,$answerarray);
  
  for($i=0; $i < count($row); $i++) {
    fputcsv($fp, $row[$i] );
  }
  
  fclose( $fp );
  
?>

它正在创建.csv文件,但时间戳及其值与问题答案不在同一行,如下所示:

Timestamp           
1676484864          
I am the life of the party. I feel little concern for others.   I am always prepared.   I get stressed out easily.
2   4   2   4

我希望Timestamp列与问题列在同一行中,如下所示:

Timestamp     I find it hard to imitate the behavior of other people.     My behavior is usually an expression of my true inner feelings, attitudes, and beliefs. 
12/3/21 14:05   TRUE    TRUE

如果可能的话,请建议我在哪里做错了。

wrrgggsh

wrrgggsh1#

您只需要在csv文件中插入两行代码,因此您只需要循环$qna数组来填充两个平面数组。
您可以使用静态单词“Timestamp”预填充第一个数组的第一个元素,使用当前UNIX时间预填充第二个数组的第一个元素。
然后循环$qna数组,将问题和答案推入各自的数组中,我使用的是无主体循环,但如果愿意,也可以在foreach循环主体中执行推入数组的操作。
填充完两个数组后,使用fputcsv()正确写入csv文件。

$csv = '/home/ankur/Desktop/iq_data.csv';
$fp = fopen($csv, 'w');

$header = ['Timestamp'];
$answers = [time()];
foreach ($qna as ['question' => $header[], 'answer' => $answers[]);

fputcsv($fp, $header);
fputcsv($fp, $answers);
fclose($fp);

相关问题