Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何格式化必须写入csv文件Codeigniter的数据_Php_Json_Codeigniter - Fatal编程技术网

Php 如何格式化必须写入csv文件Codeigniter的数据

Php 如何格式化必须写入csv文件Codeigniter的数据,php,json,codeigniter,Php,Json,Codeigniter,我需要帮助以特定格式将数据写入csv文件。 我有如下json数据 [ { 姓名:Abc, 班级:12, 日期:2018年4月14日, 答案:问题1:答案1,第二季度:a2,第三季度:a3,第四季度:a4 } ] 我将此json的解码版本存储在$details数组中。我必须将这些数据写入csv文件。这是我目前的代码- $filename = 'logs_'.$id.'.csv'; header("Content-Description: File Transfer"); header("

我需要帮助以特定格式将数据写入csv文件。 我有如下json数据

[ { 姓名:Abc, 班级:12, 日期:2018年4月14日, 答案:问题1:答案1,第二季度:a2,第三季度:a3,第四季度: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上的一个用户建议我使用control break,但我找不到解决方案。如果其他人认为这是解决方案,那么请指导我

我能想象的唯一方法就是重组阵列

这样的办法应该行得通

$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);

您是在控制JSON还是从其他地方获得JSON。最简单的解决方案是以更符合逻辑的方式创建JSONmanor@RiggsFolly你能告诉我应该如何形成json以在单独的行中获得答案吗?我将使用一个问题数组和一个匹配的答案数组来构建json数据创建json的代码有很多代码,我将首先尝试构建JSON,就像您所说的:为什么设置$objNew->name=$objNew->class=$objNew->date=;为空白,因为您需要与其他对象相同的结构,否则您的答案将不会出现在列D中。有时,答案中的条目数将>15。解决方案会影响运行时和内存需求吗?请在代码段中进行某些修改,以处理学生未回答任何问题的情况如果你是初学者,你真的应该考虑找一个你周围的老人。为了做你想做的事情,你必须给出一个例子,如果没有答案,你的json是什么样子的。