Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Парсер xml'ки
#31
Все же пришлось модифицировать свое решение. Т.к. ваши не учитывают следующий нюанс: в бд есть тег со спойлом, на данный момент его учитывать не нужно. Ну и исправить не вышлоSmile
Код:
<rewardlist type="SWEEP">
            <reward item_id="960" min="1" max="1" chance="0.5298" />    <!--Scroll: Enchant Armor (S-Grade)-->            
</rewardlist>

Но все равно всем спасибо за помощь.
Ответ
#32
Shayne Написал:БлагодарствуюSmile

Добавлено через 1 час 17 минут
PHP код:
<?php
set_time_limit
(900);
$xml = simplexml_load_file('1c.xml');
$xml2 = simplexml_load_file('ItemName-e.xml');

foreach(
$xml->npc as $npcElement)
{
$npcId = (string)$npcElement["id"];
foreach(
$npcElement->rewardlist as $rewardListElement)
{
foreach(
$rewardListElement->group as $groupElement)
{
$gChance = (string)$groupElement["chance"];
foreach(
$groupElement->reward as $rewardElement)
{
$rewardID = (string)$rewardElement["item_id"];
foreach(
$xml2->data as $data)
{
foreach(
$data->item as $itemm)
{
foreach(
$data->name as $namee)
{
if (
$itemm["id"]==$rewardID)
$item=$namee ["value"];
}
}
}
$rewardMIN = (string)$rewardElement["min"];
$rewardMAX = (string)$rewardElement["max"];
$rewardCHANCE = (string)$rewardElement["chance"];
$endCHANCE=0.9999;
$endCHANCE= $gChance/100*$rewardCHANCE;
printf("%d&nbsp&nbsp&nbsp&nbsp&nbsp%s&nbsp&nbsp&nbsp&nbsp&nbsp%d-%d&nbsp&nbsp&nbsp&nbsp&nbsp[%6.4f xx]</br>",$npcId, $item, $rewardMIN, $rewardMAX,$endCHANCE);
}
}
}
}
?>
307 строк выдает за 240 сек. это Т_Т
Слишком много "циклов в цикле в цикле", тем более через foreach.
При использовании simplexml_load_file() мы же получаем массив из xml'ки.
Почему бы не воспользоваться перебором через for, что определенно даст выигрыш во времени генерации результата, и обращаться непосредственно к массиву, изначально полученному из файла(ов).

Цитата:
PHP код:
<?php 
$npcId
= (string)$npcElement["id"];
Если пользоваться приведением типов, то, я думаю, тогда нужно к числу приводить, а не к строке. Или не приводить вообще ни к чему, PHP сам это сделает.
PHP код:
<?php 
$npcId
= (int)$npcElement["id"];
и все остальные переменные аналогично...
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)