I wondered if it was possible to read a csv file written like this in symfony using League csv or something else.
water_level,2,456,345
wind_speed,25,456,56
food_level,10.4,123,23
animal_count,56,34,124
number_of_machines,150,345,54
machineId,1234567,1234568,1234567
Header in the first column and data in the next columns.
Right now, I can read the files when the header is in the first row, I just want to know if it's possible to read it the other way!
I tried transposing but I get an error. I don't really know what's causing it if the array really is transposed.
$pathString = implode($newFilesPath);
$reader = (Reader::createFromPath($pathString))->setHeaderOffset(0);
$results = $this->transpose(iterator_to_array($reader->getRecords()));
foreach ($results as $row) {
$properties = (new AppProperty)
->setWaterLevel($row['water_level'])
->setWindSpeed($row['wind_speed'])
->setFoodLevel($row['food_level'])
->setAnimalCount($row['animal_count'])
->setNumberOfMachines($row['number_of_machines'])
->setMachineId($row['machineId'])
->setDate(new \DateTime());
$this->em->persist($properties);
}
$this->em->flush();
}
private function transpose ($array){
return array_map(null, $array);
}
The error:
Argument 1 passed to App\Entity\Property::setWaterLevel() must be of the type int or null, string given.
It looks like the transpose just didn't work.