首页 > 解决方案 > 是否可以使用 League csv 逐列读取 csv 文件?

问题描述

我想知道是否可以使用 League csv 或其他方式在 symfony 中读取这样编写的 csv 文件。

      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

第一列中的标题和下一列中的数据。

现在,当标题位于第一行时,我可以读取文件,我只想知道是否可以以其他方式读取它!

我尝试转置,但出现错误。如果数组真的被转置,我真的不知道是什么原因造成的。

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

错误:

传递给 App\Entity\Property::setWaterLevel() 的参数 1 必须是 int 或 null 类型,给定字符串。
看起来转置不起作用。

标签: symfonycsv

解决方案


推荐阅读