Предположим, у меня есть следующие настройки массива:Какое из следующих элементов более эффективно?
$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
подход.
Надейтесь, что приведенный выше тест полезен будущей аудитории.
Возможный дубликат: http://stackoverflow.com/questions/12847502/for-loop-vs-while-loop-vs-foreach-loop-php – trallallalloo
может быть дубликатом, но смешиваться с 'list()' и 'each()' делает ситуацию сравнения более сложной. – Raptor
Почему вы не сравниваете это для себя? –