dobra zamieszczam wersje taką którą sobie można sprawdzić

i powinno być juz wszystko jasne. Oczywiście jest to część funkcji bardziej złożonej tutaj są dane już wstawione a nie pobierane ale ta pętla najbardziej zwalnia.
<?php
function gen_time()
{
return ((float)$usec + (float)$sec);
}
//start generacji czasu
$start = gen_time();
//typy itemów i ich ilość
$Items = "111,100000;112,1000;203,50000;113,1000;";
$time_item = 6666611111;
$left_time = 10;
if($Items != 0 && $left_time != 0)
{
$time_item += $left_time;
foreach($id as $n => $array)
{
if(false == empty($array)) {
//rozbij tablice
$CArray[$n] = array($array['0'],$array['1'],100
); }
}
$Items = '';
$end = false;
$create = '';
foreach($CArray as $a => $b)
{
//ustaw danym typy
$Type = $b['0'];
$Count = $b['1'];
$Time = $b['2'];
//wykonuj puki nie dojdzie do 0 lub nie skończy się czas
while($time_item >= $Time && $end == false)
{
//sprawdzaj czy jest jeszcze coś do dodanie jeżeli nie przerwij pętle
if($Count > 0)
{
$time_item -= $Time;
++$create[$Type];
--$Count;
}
else
{
$end = true;
break;
}
}
if($Count != 0)
{
$Items .= $Type.",".$Count.";";
}
}
}
else
{
$create = '';
$time_item = 0;
}
$end = gen_time();
//czas wykonania skryptu
?>