Ускорение пробега в цикле большого масива.

Ge0SuB

Guest
Ускорение пробега в цикле большого масива.

Есть вот такой кусок кода
PHP:
for ($a=0;$a<sizeof($gbData);$a++)
{
	if (substr($gbData[$a][oDate],0,7)==$ad and $gbData[$a][what] == 'Pay' and $gbData[$a][account] == 0 and $gbData[$a][toAccount] == $AccountId and $gbData[$a][toAccount] != 0)
	{
		$value = $value+$gbData[$a][toSum];
	}
}
переменная $gbData имеет очень много записей, это копия из майэскюэля целой таблицы. таких пробегов в скрипте давольно много получаеться.

Может вывидете какие-то варианты по ускорению этого процесса?
Базу запихнуть в масив пришлось из-за того, что данные собираються с большого количества серверов и большое количество запросов к удаленной базе еще больше тормозит чем один запрос и запись данных в масив.

Спасибо.
 

kvf77

Red Devil
Ge0SuB

во первых, избавься от этого:
sizeof($gbData)

замени на
$max = sizeof($gbData)
а в цикле используй $max
иначе при каждом витке цикла sizeof($gbData) висчитывается снова и снова

во-вторых, почему ты не отсекаешь ненужное на этапе запроса из базы?

почему бы тебе не сделать в одном цикле все, что делают все твои пробеги за 1 раз?
 

Tor

Новичок
Нечто
kvf77
замени на
$max = sizeof($gbData)
а в цикле используй $max
иначе при каждом витке цикла sizeof($gbData) висчитывается снова и снова
это неверно
ответ на возникший у вас вопрос вы найдете поиском
 

Ge0SuB

Guest
с sizeof пасибо, действительно не подумал. Пасибо всем!
 

kvf77

Red Devil
Tor

гм? давеча было иначе - все меняется - может быть

к томуже версию еще неплохо бы знать с какой он работает

-~{}~ 31.08.05 15:28:

Ge0SuB

а ты как всегда услышал не то, что тебе советовали - схватившись за "самое простое" решение
 

Ge0SuB

Guest
версия 4.06 вроде на серваке.

Заминел я все size of на переменные и!
Раньше работало 300 секунд, после изменеий 190

не знаю из-за чего такая разница :)
 

kvf77

Red Devil
Ge0SuB

из-за того, что версия очень старая - и в ней указанный нами с Нечто вариант с sizeof в полной мере тормозит цикл.
 

Ge0SuB

Guest
Да.. действительно каменный век, вот 5.1 бы помог в этом случае :) Но я не могу там поставить другой софт. к сожалению :(
 

master_x

Pitavale XXI wieku
Да.. действительно каменный век, вот 5.1 бы помог в этом случае Но я не могу там поставить другой софт. к сожалению
Тебе поможет только хорошая оптимизация скрипта ручками. Возможно даже поможет другой алгоритм решения задачи.
 
Сверху