Сообщений: 59
Тем: 4
Зарегистрирован: Jun 2012
Репутация:
187
Shayne Написал:Благодарствую
Добавлено через 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     %s     %d-%d     [%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"];