2015-09-30 3 views
-2

Предположим, у меня есть следующие настройки массива:Какое из следующих элементов более эффективно?

$settings = array('a' => 1, 'b' => 2, 'c' => 3); 

Какой из следующего набора кодов является более эффективным с точки зрения использования памяти скорость &?

Set 1

foreach($settings as $k => $v) { 
    define($k, $v); 
} 

Set 2

while (list($key, $value) = each($settings)) { 
    define($key, $value); 
} 

Они имеют те же результаты.


UPDATE: Добавлены результаты тестов

Вот эталонные коды:

<?php 
header('Content-Type: text/plain'); 
$arr = array(); 
for($i = 0; $i < 100000; $i++) { 
    $arr['rec_' . $i] = md5(time()); 
} 

$start = microtime(true); 

foreach ($arr as $k => $v) { 
    define($k, $v); 
} 

$end = microtime(true); 
echo 'Method 1 - Foreach: ' . round($end - $start, 2) . PHP_EOL; 

$arr = array(); 
for($i = 0; $i < 100000; $i++) { 
    $arr['rec2_' . $i] = md5(time()); 
} 


$start = microtime(true); 

while (list($key, $value) = each($arr)) { 
    define($key, $value); 
} 

$end = microtime(true); 
echo 'Method 2 - While List Each: ' . round($end - $start, 2) . PHP_EOL; 
?> 

После довольно нескольких бенчмарка работает, я обнаружил, что foreach() около 2x 3x быстрее, чем while-list-each подход.

Надейтесь, что приведенный выше тест полезен будущей аудитории.

+0

Возможный дубликат: http://stackoverflow.com/questions/12847502/for-loop-vs-while-loop-vs-foreach-loop-php – trallallalloo

+0

может быть дубликатом, но смешиваться с 'list()' и 'each()' делает ситуацию сравнения более сложной. – Raptor

+1

Почему вы не сравниваете это для себя? –

ответ

1

С одной стороны, foreach нужно беспокоиться о traversable, так что в этом случае может быть немного накладных расходов compering с each в while.

Но с другой стороны, используя each и while, вы используете две две языковые конструкции и одну функцию.

Also Вы должны помнить, что после завершения each курсор будет находиться в последнем элементе массива, если он итератор бросает все элементы.

Смежные вопросы