Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: что быстрее: foreach или for
 
 автор: Лёва   (07.11.2007 в 17:48)   письмо автору
 
 

Привет! Скажите, какая конструкция работает быстрее, foreach или for? Допустим есть массив, где 2000 элементов, но индексы идут не попорядку.

   
 
 автор: RV   (07.11.2007 в 18:32)   письмо автору
 
   для: Лёва   (07.11.2007 в 17:48)
 

а что мешает засечь время да проверить?

   
 
 автор: mihdan   (07.11.2007 в 23:44)   письмо автору
 
   для: Лёва   (07.11.2007 в 17:48)
 

Смотря что делать циклом, что выводить?

   
 
 автор: Shiva   (08.11.2007 в 01:17)   письмо автору
 
   для: Лёва   (07.11.2007 в 17:48)
 

Вот код теста. Результаты по 20 тестам в комментариях.

<?php
$t 
= array();
for(
$i=0$i<=100000$i++)
{
    
$t[] = $i;
}

$debuger = new Debuger;
//Начинаем замер
for($i=0$i<=100000$i++)
{
}
$debuger->set('for');        // результат: 0.01 - 0.0104

foreach($t as $v)
{
}
$debuger->set('foreach without keys');    // результат: 0.0093 - 0.0115

foreach($t as $k => $v)
{
}
$debuger->set('foreach with keys');    // результат: 0.0129 - 0.0141

echo $debuger->cout();
?>


Общий вывод: for работает стабильнее (амплитуда меньше). foreach без ключей обычно оказывался малость быстрее.

   
 
 автор: Shiva   (08.11.2007 в 01:28)   письмо автору
 
   для: Лёва   (07.11.2007 в 17:48)
 

Есть любопытный момент. Мне пришло в голову, что, поскольку foreach в тесте два раза проходит один массив, второй раз может быть малость быстрее нормы.

Решил попробовать так:

<?php
$t 
= array();
for(
$i=0$i<=100000$i++)
{
    
$t[] = $i;
}
$t2 $t//Копия массива для второго прохода

$debuger = new Debuger;
//Начинаем замер
for($i=0$i<=100000$i++)
{
}
$debuger->set('for');        


foreach(
$t as $v)
{
}
$debuger->set('foreach without keys');    

foreach(
$t2 as $k => $v)
{
}
$debuger->set('foreach with keys');    

echo 
$debuger->cout();
?>

Результат меня удивил:
показатели for и foreach с ключами, в общем, не изменились (я ожидал, что последний, возможно, сработает медленнее). Но медленней сработал foreach без ключей. Причем, в среднем, в 4 раза медленней. Что может быть причиной? С массивом $t, по-моему представлению, ничего нового не произошло. Кто-нибудь в курсе подоплеки клонирования массивов на PHP?

   
 
 автор: Shiva   (08.11.2007 в 01:45)   письмо автору
 
   для: Лёва   (07.11.2007 в 17:48)
 

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

Вот вторая редакция:

<?php
$t 
= array();
for(
$i=0$i<=100000$i++)
{
    
$t[] = $i;
}


$debuger = new Debuger;
//Начинаем замер
for($i=0$i<=100000$i++)
{
    
$a $t[$i];
}
$debuger->set('for');        // результат: 0.0212 - 0.0224


foreach($t as $v)
{
    
$a $v;
}
$debuger->set('foreach without keys');    // результат: 0.0119 - 0.0143

foreach($t as $k => $v)
{
    
$a $v;
}
$debuger->set('foreach with keys');    // результат: 0.0163 - 0.0182

echo $debuger->cout();
?>


При пробе с клонированием массива первый foreach опять работал больше 0.4 секунды. Так что вопрос остается открытым.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования