Home > Mobile >  How to read multiple xlsx files in a folder and put them into one array?
How to read multiple xlsx files in a folder and put them into one array?

Time:02-25

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() : ''
                ];
    }
}
  •  Tags:  
  • php
  • Related