PHP: array-функции vs. foreach

Sep 11, 2009 00:44

Не все нативные функции в PHP оптимизированы.
Например, функции для работы с массивами: array_walk, array_intersect, array_diff - стабильно в два раза проигрывают циклу foreach.

function arrWalk($item, $key, &$arrTestWalk)
{
   $arrTestWalk[$key] = strtolower($item);
}

$arrTest = array();
for ($i = 0; $i < 1238; $i++)
{
  $time = time();
  $arrTest[date("D M j G:i:s T Y", (int) ($time + rand(1, 100))) . rand(1, 100)] = date("D M j G:i:s T Y", (int) ($time + rand(1, 100)));
}

$arrTestForeach = array();
$arrTestWalk = array();

function fArrayWalk($arrTest, &$arrTestWalk) {
  array_walk($arrTest, 'arrWalk', $arrTestWalk);
}

function fForeach($arrTest, &$arrTestForeach) {
   foreach ($arrTest as $name => $value)
     $arrTestForeach[$name] = strtolower($value);
}

$count = 1623;

$s = microtime(true);
for ($i = 0; $i < $count; $i++) {
   fArrayWalk($arrTest, $arrTestWalk);
}
printf('fArrayWalk %.5f
', microtime(true) - $s);

$s = microtime(true);
for ($i = 0; $i < $count; $i++) {
  fForeach($arrTest, $arrTestForeach);
}
printf('fForeach %.5f', microtime(true) - $s);

Вот такая вот несправедливость. Интересно, пофиксят ли эту неприятность в PHP 6?
Будем надеяться.

оптимизация, программирование, php

Previous post Next post
Up