В предложенный вами код особо не вчитывался, но предложу эту реализацию:
Код
<?php
$inputData = 'SELECT ....'; //Получаем данные из БД
$outputData = [];
foreach ($inputData as $row){//Собираем данные в нужном формате
if(!isset($outputData[ $row['Код'] ])){//Собираем основыне данные
$outputData[ $row['Код'] ]['Свойства'] = $row['Свойства'];
$outputData[ $row['Код'] ]['Раздел'] = $row['Раздел'];
}
$outputData[ $row['Код'] ]['Цены'][] = [//Собираем цены
'Цена' => $row['Цена'],
'Тип' => $row['Тип']
];
}
unset($inputData);//Удаляем оригинал данных
//По итогу перебираем $outputData и формируем из имеющегося xml
echo '<Товары>';
foreach ($outputData as $key => $row){//Тут уже под свои нужды пишем =)
echo '<Товар Код="'.$key.'">';
foreach ($row as $rowInner){
echo '<Цена Тип="'.$rowInner['Тип'].'">'.$rowInner['Цена'].'</Цена>';
}
/*
* ...
* ...
*/
echo '</Товар>';
}
echo '</Товары>';
В общем суть в том, что, проще сначала привести в порядок данные, сформировать их в более приятный для работы вид и уже потом проводить какие-то манипуляции