@Angelxalfa

Ошибка работы скрипта. От куда берутся лишние данные?

Добрый день! Есть три таблицы, содержащие адреса абонентов. Из них меня интересуют УЛИЦА, ДОМ, КВАРТИРА. Мне нужно создать xml-файл содержащий только уникальные названия улиц, в каждой из которых уникальные номера домов, в каждом из которых уникальные номера квартир.
Осложняется все это тем, что xml-файл формируется на весь город, а в базе данных для города может быть несколько таблиц, соответственно нужно сделать несколько выборок (по одной на таблицу) и полученные данные объединить.
Код скрипта, для выполнения этого ниже.
XML формируется, но почему то, для некоторых домов (в основном в последних улицах), добавляются теги с квартирами, которых нет(с 1 по 179), хотя в этом доме по сути квартира одна(частный дом).
От куда берутся эти квартиры???Где искать ошибку?
Заранее спасибо!

Спасибо пользователю Денис Денис Symfony2, за предложенное решение. Ниже написан исправленный код. Все работает отлично.
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('xdebug.var_display_max_depth', -1);

include '../connect.php';
	
	$tables = array(
		"table" => "1",
		"table" => "2",
		"table" => "3",
	);
$array = array();
foreach ($tables as $table) {
	$table_query = pg_query($dbconn, "SELECT street, house_number, app_number from $table");
	$data = pg_fetch_all ($table_query);
    $array = array_merge($array, $data);
}
$output = array();
foreach ($array as $value) {
    $output[$value['street']][$value['house_number']][] = $value['app_number'];
}
$dom = new DOMDocument('1.0', 'utf-8');
$dom->formatOutput = true;
	// создаем корневой элемент
	$root = $dom->createElement('root');
foreach ($output as $key => $street) {
    $street_tag = $dom->createElement("street");
	$street_tag->formatOutput = true;
	$street_tag = $root->appendChild($street_tag);
	$street_tag->setAttribute("street", "$key");
	$street_tag->appendChild( $dom->createTextNode(''));
    foreach ($street as $key => $house) {
        $house_tag = $dom->createElement("house");
		$house_tag->formatOutput = true;
		$house_tag = $street_tag->appendChild($house_tag);
		$house_tag->setAttribute("house", "$key");
		$house_tag->appendChild( $dom->createTextNode('')); 
        foreach ($house as $key => $appartment) {
           $app_tag = $dom->createElement("appartment");
			$app_tag->formatOutput = true;
			$app_tag = $house_tag->appendChild($app_tag);
			$app_tag->setAttribute("appartment", "$appartment");
			$app_tag->appendChild( $dom->createTextNode('')); 
        }
    }
}
$dom->appendChild($root);
	
// сохраняем результат в строку
$save_xml = $dom->saveXML();
// выводим полученную строку
echo $save_xml;
  • Вопрос задан
  • 258 просмотров
Пригласить эксперта
Ответы на вопрос 1
@matperez
Чел, вряд ли кто-то будет разбираться в подобной лапше. Оформи это хотя бы в виде отдельных функций. Раздели получение данных, их преобразование и создание xml. На каждом этапе контролируй что будет выдавать твой код. Вот увидишь, ошибка найдется сама собой после приведения кода в порядок. И почитай про форматирование. https://github.com/php-fig/fig-standards/blob/mast...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы