See Release Notes
Long Term Support Release
<?php namespace Box\Spout\Reader\Common\Manager; use Box\Spout\Common\Entity\Row; use Box\Spout\Reader\Common\Creator\InternalEntityFactoryInterface; /** * Class RowManager */ class RowManager { /** @var InternalEntityFactoryInterface Factory to create entities */ private $entityFactory; /** * @param InternalEntityFactoryInterface $entityFactory Factory to create entities */ public function __construct(InternalEntityFactoryInterface $entityFactory) { $this->entityFactory = $entityFactory; } /** * Detect whether a row is considered empty. * An empty row has all of its cells empty. * * @param Row $row * @return bool */ public function isEmpty(Row $row) { foreach ($row->getCells() as $cell) { if (!$cell->isEmpty()) { return false; } } return true; } /** * Fills the missing indexes of a row with empty cells. * * @param Row $row * @return Row */ public function fillMissingIndexesWithEmptyCells(Row $row) {< if ($row->getNumCells() === 0) {> $numCells = $row->getNumCells(); > > if ($numCells === 0) {return $row; } $rowCells = $row->getCells();< $maxCellIndex = max(array_keys($rowCells));> $maxCellIndex = $numCells; > > // If the row has empty cells, calling "setCellAtIndex" will add the cell > // but in the wrong place (the new cell is added at the end of the array). > // Therefore, we need to sort the array using keys to have proper order. > // @see https://github.com/box/spout/issues/740 > $needsSorting = false;for ($cellIndex = 0; $cellIndex < $maxCellIndex; $cellIndex++) { if (!isset($rowCells[$cellIndex])) { $row->setCellAtIndex($this->entityFactory->createCell(''), $cellIndex);> $needsSorting = true; } > }}> > if ($needsSorting) { return $row; > $rowCells = $row->getCells(); } > ksort($rowCells); } > $row->setCells($rowCells);