Не хвататет мозга довести до ума: PHP: <? $level=0; function xmlpars ($xml) { global $level; $parent = iconv("UTF-8","WINDOWS-1251",$xml->Группа->Ид); foreach ($xml->Группа as $group) { if(isset($group->Группы)) { $id = iconv("UTF-8","WINDOWS-1251",$group->Ид)."<br>"; $name = iconv("UTF-8","WINDOWS-1251",$group->Наименование)."<br>"; xmlpars($group->Группы); echo $level++; } else { $id = iconv("UTF-8","WINDOWS-1251",$group->Ид); $name = iconv("UTF-8","WINDOWS-1251",$group->Наименование); if ($level == 0) { db_query ("SET CHARACTER SET CP1251"); $query = "INSERT INTO `ss_categories` (`name`,`parent`,`1c-id`) VALUES ('".$name."','0','".$id."')"; db_query($query); } } } } $xmlall= simplexml_load_file($url); //Интерпретирует XML-документ в объект $group = $xmlall->Классификатор->Группы; xmlpars ($group); ?> Что то напутано с уровнем вложености. Вернее не могу сообразить, по какому принципу обнулять $level. Подскажите в какую сторону двигаться?
Заменить foreach на for или while - так просто быстрее будет работать. Отказаться от global $level; - при работе с глоб. переменными очень сложно отслеживать их состояние. Лучше использовать локальную переменную и передавай ее как параметр в функции. Так хоть понятнее будет какие она значения и в какое момент цикла имеет. Подобные "косяки" весьма сложно искать, особенно если писал код сам (т.к. субъективно на него смотришь). Я обычно делаю так. Выключаю компьютер, беру листок бумаги и с нуля рисую блок схему этого процесса по всем правилам блок схем. И как только нарисую, сразу все понятно становится.