Поэтому решить этот вопрос я додумался тупо в лоб (как обычно решают все вопросы PHP-программисты - я написал speed-тест.
<?php define('ARSIZE', (int)$argv[1] ? (int)$argv[1] : 10); $sum = 0; $a = array(); for($i = 0; $i < 1000; $i++) { $start = microtime(true); for($j = 0; $j < ARSIZE; $j++) { $a[$j] = sizeof($a); } $sum += microtime(true) - $start; } echo 'sizeof median time '.round($sum / 1000, 6)."\n"; $sum = 0; $a = array(); for($i = 0; $i < 1000; $i++) { $start = microtime(true); for($j = 0; $j < ARSIZE; $j++) { $a[$j] = count($a); } $sum += microtime(true) - $start; } echo 'count median time '.round($sum / 1000, 6)."\n"; ?>Версия PHP 5.4.4, версия ОС Linux 3.2.0 Linux Mint Debian i686 (то есть 32-битная архитектура). Процессор Intel Pentium T2080, тактовая частота 1.73 ГГц (это мой ноутбук). Результат выполнения теста:
$ php test.php 100Как видите, скорость выполнения одна и та же. Так что использовать sizeof() или count() - только дело вкуса. Мне то внешне нравится, как написано sizeof, тут и буква s такая красивая, и f тоже неплохая, и даже z присутствует в середине, придавая особый смак. Поэтому я пользуюсь sizeof().
sizeof median time 5.0E-5
count median time 4.9E-5
$ php test.php 1000
sizeof median time 0.000474
count median time 0.000479
$ php test.php 5000
sizeof median time 0.002369
count median time 0.002373
$ php test.php 10000
sizeof median time 0.004776
count median time 0.004777
$ php test.php 20000
sizeof median time 0.009542
count median time 0.009572
$ php test.php 50000
sizeof median time 0.023856
count median time 0.023878
Ничего, сделают LINQ в каком-нибудь уже шестом пхп - будет чего поизмерять :)
ОтветитьУдалить