я, кстати, после заполнения реестра очищаю почти все суперглобальные массивы, чтобы небыло соблазна их заюзать в модуле использование реестра даёт следующие преимущества: 1. простая подмена состояния (назначение - виртуальные инклуды и модульные тесты). 2. централизованное хранение стэка состояний с возможностью вывести его дамп в любой момент.
array_map "тормозная" функция. Перебор работает быстрее. PHP: <?php foreach ($array as &$v) $v = (int)$v;
Это у меня от плохого знания PHP - исправлюсь. Ну вообщем в моей ситуации массив не обладает такими свойствами, но спасибо! Думаю foreach все же лучше. Про array_map, тоже думаю - вызывать для каждого элемента функцию это "тяжело".
насколько я понял можно так: PHP: <?php function ArrayToInt($arr) { for ($i = 0; $i < count($arr); $i++) $arr[$i] = (int)$arr[$i]; return $arr; }
PHP: <? function FillArr() { unset($res); for ($i=0; $i < 100000; $i++) { $res[$i] = (string)$i; } return $res; } function ArrayToInt_1($arr) { for ($i = 0; $i < count($arr); $i++) $arr[$i] = (int)$arr[$i]; return $arr; } function ArrayToInt_2($arr) { foreach ($arr as &$v) $v = (int)$v; return $arr; } function ArrayToInt_3($arr) { return array_map("intval",$arr); } /* print_r(ArrayToInt_1(FillArr())); echo '<br />'; print_r(ArrayToInt_2(FillArr())); echo '<br />'; print_r(ArrayToInt_3(FillArr())); echo '<br />'; */ $arr = FillArr(); $time_start = microtime(1); $arr = ArrayToInt_1($arr); $time_end = microtime(1); $time = $time_end - $time_start; echo 'ArrayToInt_1: '.$time.' секунд<br />'; $arr = FillArr(); $time_start = microtime(1); $arr = ArrayToInt_2($arr); $time_end = microtime(1); $time = $time_end - $time_start; echo 'ArrayToInt_2: '.$time.' секунд<br />'; $arr = FillArr(); $time_start = microtime(1); $arr = ArrayToInt_3($arr); $time_end = microtime(1); $time = $time_end - $time_start; echo 'ArrayToInt_3: '.$time.' секунд<br />'; ?> Результат: Код (Text): ArrayToInt_1: 0.197717905045 секунд ArrayToInt_2: 0.116955041885 секунд ArrayToInt_3: 0.159669876099 секунд Повторял несколько раз, ArrayToInt_2 работает быстрее
ах да , попробывал так: PHP: <? function ArrayToInt_1($arr) { $len = count($arr); for ($i = 0; $i < $len; $i++) $arr[$i] = (int)$arr[$i]; return $arr; } ?> ArrayToInt_1 - стала гораздо ближе к 1 месту но все равно ArrayToInt_2 - лидирует
Экономите на спичках, господа... для чего нужна такая функция, по идее? Для очистки входных данных. У вас на каждой странице сайта принимается массив входных данных из 100 тыс. элементов? Нет. На массиве из 100 элементов разница будет заметна? Нет. А если нет разницы, зачем писать больше? Да и разница в скорости оказывается пустячная.
Кое-что изменил вот: http://rapidshare.com/files/92754023/RuzzzPHPPagesAdmin.rar.html http://ifolder.ru/5398964 http://webfile.ru/1750130