X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

2 страниц Открыть меню  < 1 2  
Ответить в данную темуНачать новую тему
> Печально, но факт.
Youshi
сообщение 2008-12-15, 0:40
Сообщение #21
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (Alexander @ 15.12.2008, 0:32)
Youshi, смысл в чем: если $init_other_classes===true, мы грузим все классы, кроме тех, которые указаны в $classes; если же $init_other_classes===false - мы грузим только классы, находящиеся внутри $classes


Тогда вот так:

//Если true, исключаем все классы, указанные в $classes и грузим остальные
				if ($init_other_classes) $arr = array_diff ($arr, $classes);
				//Иначе оставляем только классы, имеющиеся в обоих массивах (для "защиты от дурака", заполняющего $classes,
				else $arr = array_intersect ($classes, $arr);
		foreach($arr as $v)
				{
				$v=ucfirst($v);
				$this->$v=new $v(&$this);
				}


но это при условии, что в $classes не попадают еще какие-то классы кроме перечисленных в $arr
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2008-12-15, 0:47
Сообщение #22
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Да, такая идея у меня проскакивала.. Только, действительно ли быстрее эти конструкции чем

Цитата (Alexander @ 15.12.2008, 0:09)
if ($init_other_classes xor in_array($v,$classes))
Перейти в начало страницы
+Цитировать сообщение
Next
сообщение 2008-12-15, 0:56
Сообщение #23
Новичок
Иконка группы

Группа: Разработчики
Сообщений: 76
Регистрация: 2008-12-13

Репутация:   нет  
Всего: 8


Цитата (Alexander @ 15.12.2008, 0:32)
Youshi, смысл в чем: если $init_other_classes===true, мы грузим все классы, кроме тех, которые указаны в $classes; если же $init_other_classes===false - мы грузим только классы, находящиеся внутри $classes

if ($init_other_classes) $arr = array_diff ($classes, $arr);
else $arr = array_intersect ($classes, $arr);
foreach($arr as $v)
{
$v=ucfirst($v);
$this->$v=new $v(&$this);
}
---------------------------------
блин, опередили))

Цитата (Alexander @ 15.12.2008, 0:47)
Да, такая идея у меня проскакивала.. Только, действительно ли быстрее эти конструкции чем

if ($init_other_classes xor in_array($v,$classes))
будет проверять каждый элемент $arr
а у Youshi он заранее все исключит

Сообщение отредактировал Next - 2008-12-15, 0:56
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2008-12-15, 1:08
Сообщение #24
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (Alexander @ 15.12.2008, 0:47)
Да, такая идея у меня проскакивала.. Только, действительно ли быстрее эти конструкции чем


Тест показал, что не быстрее...

<?php
$x = false;
$arr1 = array ();
$arr2 = array ();
for ($i=0;$i<100000;$i++)
{
	$arr1[] = md5($i);
}
for ($i= 20000;$i<70000;$i++)
{
	$arr2[] =  md5($i);
}
$start1 = microtime(1);
$arr3 =($x) ? array_diff($arr2, $arr1) : array_intersect($arr2, $arr1);
$end1 =  microtime(1);
$start2 = microtime(1);
foreach ($arr1 AS $k => $v)
{
	if ($x xor in_array($x, $arr2))
	{
		//do nothing
	}
}
$end2 =  microtime(1);
echo round($end1-$start1, 5).&#39;<br>&#39;.round($end2-$start2, 5);
?>


При $x = true;

Функция выполняется 0.71633 секунд против 0.06455 в цикле
При $x = false скрипт крутится 30 секунд и прерывается по таймауту.
Перейти в начало страницы
+Цитировать сообщение
Next
сообщение 2008-12-15, 1:48
Сообщение #25
Новичок
Иконка группы

Группа: Разработчики
Сообщений: 76
Регистрация: 2008-12-13

Репутация:   нет  
Всего: 8


не может такого быть))
------
аа понял

if ($x xor in_array($x, $arr2))

при $x=false происходит некорректная проверка содержания false в $arr - изза этого процесс тупо "зависает"
Так что используй
if ($x xor in_array($v, $arr2))

Да и потом уж очень много элементов массивов - изза этого будет тоже зависать))
Так что
for ($i=0;$i<100000;$i++)
{
	$arr1[] = md5($i);
}
for ($i= 20000;$i<70000;$i++)
{
	$arr2[] =  md5($i);
}

меняем на
for ($i=0;$i<1000;$i++)
{
	$arr1[] = md5($i);
}
for ($i= 20000;$i<21000;$i++)
{
	$arr2[] =  md5($i);
}

Проверяем и вуаля - что я и говорил)))
0.00213 - при новом методе
0.20476 - прии старом
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2008-12-15, 2:05
Сообщение #26
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата
при $x=false происходит некорректная проверка содержания false в $arr - изза этого процесс тупо "зависает"
Так что используй


эх. точно. невнимательность...

Цитата (Next @ 15.12.2008, 1:48)
Проверяем и вуаля - что я и говорил)))
0.00213 - при новом методе
0.20476 - прии старом



угу. у меня в обоих случаях (true - false) выдало почти одинаковые результаты:

0.03952
11.95211

только количества элементов я другие брал...
Перейти в начало страницы
+Цитировать сообщение

2 страниц Открыть меню  < 1 2
Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0387 сек.    12 запросов    GZIP включен    Сейчас: 2024-04-19, 23:10