Как отформатировать данные, которые должны быть записаны в CSV-файл Codeigniter - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужна помощь для записи моих данных в 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 голосов
/ 27 апреля 2018

единственный способ, который я могу себе представить, - это реструктурировать массив

что-то подобное должно работать

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...