如何格式化必须写在csv文件Codeigniter上的数据

时间:2018-04-27 10:17:04

标签: php json codeigniter

我需要帮助以特定格式在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;

我需要特定格式的数据。我附加了包含当前输出和所需输出的图像。 我希望将答案分成不同的行,如图所示。

Current and required format

(之前我曾问过类似的问题,但我不得不将其删除,因为它格式不正确所以请不要标记它) 我希望在不使用任何外部库或插件的情况下实现此目的。如果您对如何实现这一点有任何想法,请告诉我。 此外,我被stackoverflow上的一个用户建议使用控制中断,但我无法找到解决方案。如果其他人认为这是解决方案,那么请指导我

1 个答案:

答案 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);