我需要帮助以特定格式在csv文件中编写数据。 我有以下的json数据
[
{
"name": "Abc",
"class": "12",
"date": "14-04-2018",
"answers": "question1 : answer1, q2 : a2, q3 : a3, q4 : a4"
}
]
我将这个json的解码版本存储在$ details数组中。我必须在csv文件中写入此数据。这是我目前的代码 -
$filename = 'logs_'.$id.'.csv';
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/csv; ");
$file = fopen('php://output', 'w');
$header = array("name","class","date","answers");
fputcsv($file, $header);
foreach ($details as $key=>$line){
fputcsv($file,$line);
}
fclose($file);
exit;
我需要特定格式的数据。我附加了包含当前输出和所需输出的图像。 我希望将答案分成不同的行,如图所示。
(之前我曾问过类似的问题,但我不得不将其删除,因为它格式不正确所以请不要标记它) 我希望在不使用任何外部库或插件的情况下实现此目的。如果您对如何实现这一点有任何想法,请告诉我。 此外,我被stackoverflow上的一个用户建议使用控制中断,但我无法找到解决方案。如果其他人认为这是解决方案,那么请指导我
答案 0 :(得分:1)
我能想象的唯一方法是重组数组
类似的东西应该起作用
$str = '[
{
"name": "Abc",
"class": "12",
"date": "14-04-2018",
"answers": "question1 : answer1, q2 : a2, q3 : a3, q4 : a4"
},
{
"name": "Abc",
"class": "12",
"date": "14-04-2018",
"answers": "question1 : answer1, q2 : a2, q3 : a3, q4 : a4"
}
]';
$arrData = [];
$arrJsonData = json_decode($str);
foreach($arrJsonData AS $objItem)
{
$arrAnswers = explode(',', $objItem->answers);
$objItem->answers = (count($arrAnswers) > 0) ? array_shift($arrAnswers) : array();
$arrData[] = $objItem;
if (count($arrAnswers) > 0)
{
foreach($arrAnswers AS $val)
{
$objNew = new stdClass();
$objNew->name = '';
$objNew->class = '';
$objNew->date = '';
$objNew->answers = $val;
$arrData[] = $objNew;
}
}
}
print_r($arrData);