PHP DOM. Парсинг нескольких xml файлов при помощи DOM и объединение спарсенных данных

У поставщика есть несколько xml файлов с параметрами товаров: основная информация, остатки и категории

У меня получилось распарсить каждый файл, но объединить данные не могу. После парсинга, данные записываются в базу.

Делаю так: под каждый файл написан класс, внутри каждого класса хранится метод с парсингом файла.

Урезанный пример кода:

class PRODUCT{
 public function products($xmlPrice){
  $dom = new DOMDocument;
  $dom -> load($xmlPrice);
  foreach($dom -> documentElement -> childNodes as $product){
   if($product -> nodeType == 1 && $product -> nodeName == 'product_id'){
      $productId = $product -> textContent;
   }
   if($product -> nodeType == 1 && $product -> nodeName == 'description'){
      $description = $product -> textContent;
   }
  }
 }
}
$product = new PRODUCT;
$product -> products($xmlPrice);

class STOCK{
 public function stocks($xmlStock){
  $domStock = new DOMDocument;
  $domStock -> load($xmlStock);
  foreach($domStock -> documentElement -> childNodes as $stock){
   if($stock -> nodeType == 1 && $product -> nodeName == 'product_id'){
      $stockProductId = $stock -> textContent;
   }
   if($stock -> nodeType == 1 && $stock -> nodeName == 'quantity'){
      $stockQuantity = $stock -> textContent;
   }
  }
 }
}
$stock = new STOCK;
$stock -> stocks($xmlStock);

//Примерный вывод должен быть в виде: $productId: $description: $stockQuantity ;

Никак не пойму, как сравнить product_id из первого класса с $stockProductId и вывести $quantity вместе с основной информацией о товаре.

С другими выгрузками от поставщиков такой проблемы не было, они выгружают всю информацию в 1 xml, и там совсем несложно оперировать данными.


Ответы (1 шт):

Автор решения: Маргаритыч

Пришла к следующему решению:
В указанных классах собрала данные в массивы, затем объявила переменные массива как глобальные, после вызова классов объединила их в один общий массив. После этого, общий массив $arrayAll[] можно разобрать как обычный многомерный массив

class PRODUCT{
 public function products($xmlPrice){
  $dom = new DOMDocument;
  $dom -> load($xmlPrice);
  foreach($dom -> documentElement -> childNodes as $product){
   if($product -> nodeType == 1 && $product -> nodeName == 'product_id'){
      $productId = $product -> textContent;
   }
   if($product -> nodeType == 1 && $product -> nodeName == 'description'){
      $description = $product -> textContent;
   }
   $arrayProducts[] = array(
    'productId'   =>  $productId, 
    'description' =>  $description
   );
   global $arrayProducts;
  }
 }
}
$product = new PRODUCT;
$product -> products($xmlPrice);

class STOCK{
 public function stocks($xmlStock){
  $domStock = new DOMDocument;
  $domStock -> load($xmlStock);
  foreach($domStock -> documentElement -> childNodes as $stock){
   if($stock -> nodeType == 1 && $product -> nodeName == 'product_id'){
      $stockProductId = $stock -> textContent;
   }
   if($stock -> nodeType == 1 && $stock -> nodeName == 'quantity'){
      $stockQuantity = $stock -> textContent;
   }
   $arrayStock[] = array(
    'stockProductId' =>  $stockProductId,
    'stockQuantity'  =>  $stockQuantity
   );
   global $arrayStock;
  }
 }
}
$stock = new STOCK;
$stock -> stocks($xmlStock);

$arrayAll[] = array(
 'arrayProducts' => $arrayProducts, 
 'arrayStock'    => $arrayStock
);
→ Ссылка