Tell me how to do it, I have a folder with xlsx files, with 2 arguments name and price
The task is that I need to pull out information from all files into one array.
Here is my code
<?php
$filelist = glob("prices/*.xlsx");
// $data = substr_replace($filelist, null, 0, 7);
// echo '<pre>';
// print_r($filelist);
// echo '<pre>';
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
$myarr = array();
foreach($filelist as $value) {
$file = $value;
$reader = IOFactory::createReaderForFile($file);
$reader->setReadDataOnly(true);
// Читаем файл и записываем информацию в переменную
$spreadsheet = $reader->load($file);
// Так можно достать объект Cells, имеющий доступ к содержимому ячеек
$cells = $spreadsheet->getSheet(0)->getCellCollection();
// Далее перебираем все заполненные строки
for ($row = 2; $row <= $cells->getHighestRow(); $row ){
$array[$row]['name']=($cells->get('A'.$row))?$cells->get('A'.$row)->getValue():'';
$array[$row]['price']=($cells->get('B'.$row))?$cells->get('B'.$row)->getValue():'';
}
$myarr[] = $array;
}
echo '<pre>';
print_r($myarr);
echo '<pre>'
?>
The error is that the total number of products in xlsx files is somewhere around 500-600 and I get 1200 in the array
If I take out
$myarr[] = $array;
For a cycle, only 2 files are read.
CodePudding user response:
You are overwriting the array in the inner loop on the second pass
$myarr = array();
foreach($filelist as $value) {
$file = $value;
$reader = IOFactory::createReaderForFile($file);
$reader->setReadDataOnly(true);
// Читаем файл и записываем информацию в переменную
$spreadsheet = $reader->load($file);
// Так можно достать объект Cells, имеющий доступ к содержимому ячеек
$cells = $spreadsheet->getSheet(0)->getCellCollection();
// Далее перебираем все заполненные строки
for ($row = 2; $row <= $cells->getHighestRow(); $row ) {
$myarr[] = ['name' => $cells->get('A'.$row) ? $cells->get('A'.$row)->getValue() : '',
'price' => $cells->get('B'.$row) ? $cells->get('B'.$row)->getValue() : ''
];
}
}