У меня сложный вывод, основанный на изображении выше, мне нужно создать CSV-файл, подобный этому
Date,Reservoir Level,P5,P6,P2,P3,P4,SP6,SP4,SP5,SP3,SP2
1574043963000,19.1,,,,,,,,,,
1574039698000,20.665,11.722,,,,,,,,,
1574039699000,8.735,8.879,8.835,,,,,,,,
1574039702000,15.106,,,,,,,,,,
1574039703000,undefined,12.09,,,,,,,,,
1574039704000,13.707,,,,,,,,,,
1574039705000,13.17,,,,,,,,,,
...
Я использовал Laravel -Excel для получения Это. Вот что у меня есть (основываясь на ответе ниже)
public function collection()
{
$rows = collect();
foreach ($this->data as $recordKey => $record) {
$date = $record->date;
$instrumentReading = json_decode($record->instrument_reading, true);
if ($rows->has($date)) {
$row = $rows->get($date);
} else {
$row = collect([
'date' => $date,
]);
}
$i = 0;
foreach ($instrumentReading as $key => $value) {
$elementIndex = array_keys($this->header, $key);
$price = $elementIndex[0];
$row->put($key, $value);
// info($price, [$i]);
++$i;
}
info($row);
$rows->put($date, $row);
}
return $rows;
}
Моя проблема начинается со второй записи P5: 20,665 входит в столбец Reservoir level
. И затем третья запись P2: 8.735 также входит в столбец Reservoir level
. Как мне это исправить?
РЕДАКТИРОВАНИЕ
Вот как я устанавливаю заголовки
public function headings(): array
{
$header = collect(['Date']);
foreach ($this->data as $rowNo => $row) {
$reading = json_decode($row->instrument_reading);
foreach ($reading as $ra1 => $val) {
if (!$header->contains($ra1)) {
$header->push($ra1);
}
}
}
$this->header = $header->toArray();
return $header->toArray();
}
Ценю вашу помощь