Лют 172012
 

Таблица специальных символов HTML XHTML

Некоторые символы, введенные в HTML документ будут интерпретироваться не так, как задумал автор. Это, например, символы “<” и “>”, используемые для указания тегов.

В этих случаях можно вводить нужные символы с помощью специальных кодов. Коды начинаются с символа “амперсанд”(&). За ним следует название символа либо его числовой код в десятичной или шестнадцатеричной системе. Завершает код символ “точка с запятой”(;).

В спецификации HTML указано большое количество спецсимволов, но только некоторые из них используются. Наиболее часто используемые спецсимволы приведены в таблице:

Имя Код Вид Описание
&quot; &#34; двойная кавычка
&amp; &#38; & амперсанд
&lt; &#60; < знак ‘меньше’
&gt; &#62; > знак ‘больше’
&nbsp; &#160; неразрывный пробел
&iexcl; &#161; ¡ перевернутый восклицательный знак
&cent; &#162; ¢ цент
&pound; &#163; £ фунт стерлингов
&curren; &#164; ¤ денежная единица
&yen; &#165; ¥ иена или юань
&brvbar; &#166; ¦ разорванная вертикальная черта
&sect; &#167; § параграф
&uml; &#168; ¨ умляут
&copy; &#169; © знак copyright
&ordf; &#170; ª женский порядковый числитель
&laquo; &#171; « левая двойная угловая скобка
&not; &#172; ¬ знак отрицания
&shy; &#173; место возможного переноса
&reg; &#174; ® знак зарегистрированной торговой марки
&macr; &#175; ¯ верхняя горизонтальная черта
&deg; &#176; ° градус
&plusmn; &#177; ± плюс-минус
&sup2; &#178; ² “в квадрате”
&sup3; &#179; ³ “в кубе”
&acute; &#180; ´ знак ударения
&micro; &#181; µ микро
&para; &#182; символ параграфа
&middot; &#183; · точка
&cedil; &#184; ¸ седиль (орфографический знак)
&sup1; &#185; ¹ верхний индекс ‘один’
&ordm; &#186; º мужской порядковый числитель
&raquo; &#187; » правая двойная угловая скобка
&frac14; &#188; ¼ одна четвертая
&frac12; &#189; ½ одна вторая
&frac34; &#190; ¾ три четвертых
&iquest; &#191; ¿ перевернутый вопросительный знак
&Agrave; &#192; À латинская заглавная А с тупым ударением
&Aacute; &#193; Á латинская заглавная А с острым ударением
&Acirc; &#194; Â латинская заглавная А с диакритическим знаком над гласной
&Atilde; &#195; Ã латинская заглавная А с тильдой
&Auml; &#196; Ä латинская заглавная А с двумя точками
&Aring; &#197; Å латинская заглавная А с верхним кружком
&AElig; &#198; Æ латинские заглавные символы AE вместе
&Ccedil; &#199; Ç латинская заглавная C с седилем
&Egrave; &#200; È латинская заглавная E с тупым ударением
&Eacute; &#201; É латинская заглавная E с острым ударением
&Ecirc; &#202; Ê латинская заглавная E с диакритическим знаком над гласной
&Euml; &#203; Ë латинская заглавная E с двумя точками
&Igrave; &#204; Ì латинская заглавная I с тупым ударением
&Iacute; &#205; Í латинская заглавная I с острым ударением
&Icirc; &#206; Î латинская заглавная I с диакритическим знаком над гласной
&Iuml; &#207; Ï латинская заглавная I с двумя точками
&ETH; &#208; Ð латинская заглавная D с черточкой
&Ntilde; &#209; Ñ латинская заглавная N с тильдой
&Ograve; &#210; Ò латинская заглавная O с тупым ударением
&Oacute; &#211; Ó латинская заглавная O с острым ударением
&Ocirc; &#212; Ô латинская заглавная O с диакритическим знаком над гласной
&Otilde; &#213; Õ латинская заглавная O с тильдой
&Ouml; &#214; Ö латинская заглавная O с двумя точками
&times; &#215; × знак умножения
&Oslash; &#216; Ø латинская заглавная O со штрихом
&Ugrave; &#217; Ù латинская заглавная U с тупым ударением
&Uacute; &#218; Ú латинская заглавная U с острым ударением
&Ucirc; &#219; Û латинская заглавная U с диакритическим знаком
&Uuml; &#220; Ü латинская заглавная U с двумя точками
&Yacute; &#221; Ý латинская заглавная Y с острым ударением
&THORN; &#222; Þ латинская заглавная THORN
&agrave; &#224; à латинская строчная a с тупым ударением
&aacute; &##225; á латинская строчная a с острым ударением
&acirc; &##226; â латинская строчная a с диакритическим знаком
&atilde; &#227; ã латинская строчная a с тильдой
&auml; &#228; ä латинская строчная a с двумя точками
&aring; &#229; å латинская строчная a с верхним кружком
&aelig; &#230; æ латинская строчные буквы ae
&ccedil; &#231; ç латинская строчная c с седилем
&egrave; &#232; è латинская строчная e с тупым ударением
&eacute; &#233; é латинская строчная e с острым ударением
&ecirc; &#234; ê латинская строчная e с диакритическим знаком
&euml; &#235; ë латинская строчная e с двумя точками
&igrave; &#236; ì латинская строчная I с тупым ударением
&iacute; &#237; í латинская строчная I с острым ударением
&icirc; &#238; î латинская строчная I с диакритическим знаком
&iuml; &#239; ï латинская строчная I с двумя точками
&eth; &#240; ð латинская строчные символы eth
&ntilde; &#241; ñ латинская строчная N с тильдой
&ograve; &#242; ò латинская строчная O с тупым ударением
&oacute; &#243; ó латинская строчная O с острым ударением
&ocirc; &#244; ô латинская строчная O с диакритическим знаком
&otilde; &#245; õ латинская строчная I с тильдой
&ouml; &#246; ö латинская строчная I с двумя точками
&divide; &#247; ÷ знак деления
&oslash; &#248; ø латинская строчная O со штрихом
&ugrave; &#249; ù латинская строчная U с тупым ударением
&uacute; &#250; ú латинская строчная U с острым ударением
&ucirc; &#251; û латинская строчная U с диакритическим знаком
&uuml; &#252; ü латинская строчная U с двумя точками
&yacute; &#253; ý латинская строчная Y с острым ударением
&thorn; &#254; þ латинская строчная thorn
&yuml; &#255; ÿ латинская строчная Y с двумя точками
&fnof; &#402; ; знак функции
Символы для букв
&circ; &#710; ; диакритический знак над гласной
&tilde; &#732; ; тильда
Греческие буквы
&Alpha; &#913; ; заглавная альфа
&Beta; &#914; ; заглавная бета
&Gamma; &#915; ; заглавная гамма
&Delta; &#916; ; заглавная дельта
&Epsilon; &#917; ; заглавная эпсилон
&Zeta; &#918; ; заглавная дзета
&Eta; &#919; ; заглавная эта
&Theta; &#920; ; заглавная тета
&Iota; &#921; ; заглавная иота
&Kappa; &#922; ; заглавная каппа
&Lambda; &#923; ; заглавная лямбда
&Mu; &#924; ; заглавная мю
&Nu; &#925; ; заглавная ню
&Xi; &#926; ; заглавная кси
&Omicron; &#927; ; заглавная омикрон
&Pi; &#928; ; заглавная пи
&Rho; &#929; ; заглавная ро
&Sigma; &#931; ; заглавная сигма
&Tau; &#932; ; заглавная тау
&Upsilon; &#933; ; заглавная ипсилон
&Phi; &#934; ; заглавная фи
&Chi; &#935; ; заглавная хи
&Psi; &#936; ; заглавная пси
&Omega; &#937; ; заглавная омега
&alpha; &#945; ; строчная альфа
&beta; &#946; ; строчная бета
&gamma; &#947; ; строчная гамма
&delta; &#948; ; строчная дельта
&epsilon; &#949; ; строчная эпсилон
&zeta; &#950; ; строчная дзета
&eta; &#951; ; строчная эта
&theta; &#952; ; строчная тета
&iota; &#953; ; строчная иота
&kappa; &#954; ; строчная каппа
&lambda; &#955; ; строчная лямбда
&mu; &#956; ; строчная мю
&nu; &#957; ; строчная ню
&xi; &#958; ; строчная кси
&omicron; &#959; ; строчная омикрон
&pi; &#960; ; строчная пи
&rho; &#961; ; строчная ро
&sigmaf; &#962; ; строчная сигма (final)
&sigma; &#963; ; строчная сигма
&tau; &#964; ; строчная тау
&upsilon; &#965; ; строчная ипсилон
&phi; &#966; ; строчная фи
&chi; &#967; ; строчная хи
&psi; &#968; ; строчная пси
&omega; &#969; ; строчная омега
Общая пунктуация
&ndash; &#8211; тире
&mdash; &#8212; длинное тире
&lsquo; &#8216; левая одиночная кавычка
&rsquo; &#8217; правая одиночная кавычка
&sbquo; &#8218; нижняя одиночная кавычка
&ldquo; &#8220; левая двойная кавычка
&rdquo; &#8221; правая двойная кавычка
&bdquo; &#8222; нижняя двойная кавычка
Прочие символы
&dagger; &#8224 латинский крест
&Dagger; &#8225 двойной крест
&bull; &#8226; маленький черный кружок
&hellip; &#8230; многоточие …
&#8240; знак промилле (процент с дополнительным ноликом)
&prime; &#8242; ; одиночный штрих – минуты
&Prime; &#8243; ; двойной штрих – секунды
&oline; &#8254; ; надчеркивание
&frasl; &#8260; ; косая дробная черта
&euro; &#8364; ? евро
&#8470; знак номера
&trade; &#8482; знак торговой марки
&loz; &#9674 ; ромб
&#9675 ; круг
Стрелки
&larr; &#8592; ; стрелка влево
&uarr; &#8593; ; стрелка вверх
&rarr; &#8594; ; стрелка вправо
&darr; &#8595; ; стрелка вниз
&harr; &#8596; ; стрелка влево-вправо
&#8597; ; стрелка вверх-вниз
Масти
&spades; &#9824; ; знак масти ‘пики’
&clubs; &#9827; ; знак масти ‘трефы’
&hearts; &#9829; ; знак масти ‘червы’
&diams; &#9830; ; знак масти ‘бубны’
Лют 172012
 

Работа с переменной $_SERVER

$_SERVER -- ($HTTP_SERVER_VARS [устаревшее]) — Информация о сервере и среде исполнения
   Переменная $_SERVER - это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные здесь.
   Переменная $HTTP_SERVER_VARS содержит ту же начальную информацию, но она не суперглобальная. (Заметьте, что $HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно)
'PHP_SELF' - Имя файла скрипта, который сейчас выполняется, относительно корня документов. Например,$_SERVER['PHP_SELF'] в скрипте по адресу http://example.com/test.php/foo.bar будет /test.php/foo.bar. Константа __FILE__ содержит полный путь и имя файла текущего (то есть подключенного) файла. Если PHP запущен в командной строке, эта переменная содержит имя скрипта, начиная с PHP 4.3.0. Раньше она была недоступна.
'argv' - Массив агрументов, переданных скрипту. Когда скрипт запущен в командой строке, это дает C-подобный доступ к параметрам командной строки. Когда вызывается через метод GET, этот массив будет содержать строку запроса.
'argc' - Содержит количество параметров, переданных скрипту (если запуск произведен в командной строке).
'GATEWAY_INTERFACE' - Содержит используемую сервером версию спецификации CGI; к примеру'CGI/1.1'.
'SERVER_ADDR' - IP адрес сервера, на котором выполняется текущий скрипт.
'SERVER_NAME' - Имя хоста, на котором выполняется текущий скрипт. Если скрипт выполняется на виртуальном хосте, здесь будет содержатся имя, определенное для этого виртуального хоста.
'SERVER_SOFTWARE' - Строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос.
'SERVER_PROTOCOL' - Имя и версия информационного протокола, через который была запрошена страница; к примеру 'HTTP/1.0';
'REQUEST_METHOD' - Какой метод был использован для запроса страницы; к примеру 'GET', 'HEAD', 'POST', 'PUT'. Замечание: PHP скрипт завершается после посылки заголовков (тоесть после того, как осуществляет любой вывод без буферизации вывода), если запрос был осуществлен методом HEAD.
'REQUEST_TIME' - Временная метка начала запроса. Доступна, начиная с PHP 5.1.0. Начиная с PHP 5.4.0, имеет тип float с указанием микросекунд.
'QUERY_STRING' - Строка запросов, если есть, с помощью которой была получена страница.
'DOCUMENT_ROOT' - Директория корня документов, в которой выполняется текущий скрипт, в точности та, которая указана в конфигурационном файле сервера.
'HTTP_ACCEPT' - Содержимое заголовка Accept: из текущего запроса, если он есть.
'HTTP_ACCEPT_CHARSET' - Содержимое заголовка Accept-Charset: из текущего запроса, если он есть. Например: 'iso-8859-1,*,utf-8'.
'HTTP_ACCEPT_ENCODING' - Содержимое заголовка Accept-Encoding: из текущего запроса, если он есть. Например: 'gzip'.
'HTTP_ACCEPT_LANGUAGE' - Содержимое заголовка Accept-Language: из текущего запроса, если он есть. Например: 'en'
'HTTP_CONNECTION' - Содержимое заголовка Connection: из текущего запроса, если он есть. Например: 'Keep-Alive'
'HTTP_HOST' - Содержимое заголовка Host: из текущего запроса, если он есть.
'HTTP_REFERER' - Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять
'HTTP_USER_AGENT' - Содержимое заголовка User-Agent: из текущего запроса, если он есть. Эта строка содержит обозначение браузера, которым пользователь запросил данную страницу. Типичным примером является строка: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Среди прочего, вы можете использовать это значение с функцией get_browser() чтобы адаптировать вывод вашей страницы к возможностям браузера пользователя
'HTTPS' - Принимает непустое значение, если запрос был произведен через протокол HTTPS. Замечание: Обратите внимание, что при использовании ISAPI с IIS значение будет off, если запрос не был произведен через протокол HTTPS.
'REMOTE_ADDR' - IP-адрес, с которого пользователь просматривает текущую страницу.
'REMOTE_HOST' - Удаленный хост, с которого пользователь просматривает текущую страницу. Обратный просмотр DNS базируется на значении переменной REMOTE_ADDR. Замечание: Ваш веб-сервер должен быть настроен, чтобы создавать эту переменную. Для примера, в Apache вам необходимо присутствие директивы HostnameLookups On в файле httpd.conf, чтобы эта переменная создавалась. См. также gethostbyaddr().
'REMOTE_PORT' - Порт на удаленной машине, который используется для связи с веб-сервером.
'REMOTE_USER' - Аутентифицированный пользователь.
'REDIRECT_REMOTE_USER' - Аутентифицированный пользователь, если запрос был перенаправлен изнутри.
'SCRIPT_FILENAME' - Абсолютный путь к скрипту, который в данный момент исполняется. Замечание:Если скрипт запускается в коммандной строке (CLI), используя относительный путь, такой как file.php или ../file.php, переменная $_SERVER['SCRIPT_FILENAME'] будет содержать относительный путь, указанный пользователем.
'SERVER_ADMIN' - Эта переменная получает свое значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для данного виртуального хоста.
'SERVER_PORT' - Порт на компьютере сервера, используемый веб-сервером для соединения. Для установок по умолчанию, значение будет '80'; используя SLL, например, это значение будет таким, какое сконфигурировано для соединений безопасного HTTP.
'SERVER_SIGNATURE' - Строка, содержащая версию сервера и имя виртуального хоста, которые добавляются к генерируемым сервером страницам, если включено.
'PATH_TRANSLATED' - Filesystem- (not document root-) based path to the current script, after the server has done any virtual-to-real mapping. Замечание: Начиная с PHP 4.3.2, переменная PATH_TRANSLATED больше не устанавливается неявно в Apache 2 SAPI, по сравнению с Apache версии 1, где она устанавливается в то же самое значение, что и переменная SCRIPT_FILENAME, когда она не используется Apache. Это изменение было сделано для соответствия спецификации CGI, где переменная PATH_TRANSLATED должна существовать только тогда, когда PATH_INFO определена. Пользователи Apache 2 могут использовать директиву AcceptPathInfo = On в конфигурационном файле httpd.conf для задания переменной PATH_INFO.
'SCRIPT_NAME' - Содержит путь, к текущему исполняемому скрипту. Это полезно для страниц, которые должны указывать на самих себя. Константа __FILE__ содержит полный путь и имя текущего (т.е. включаемого) файла.
'REQUEST_URI' - URI, который был передан для того, чтобы получить доступ к этой странице. Например, '/index.html'.
'PHP_AUTH_DIGEST' - При выполнении HTTP Digest аутентификации, этой переменной присваивается заголовок 'Authorization', который присылается клиентом (его необходимо потом использовать для соответствующей валидации).
'PHP_AUTH_USER' - Когда выполняется HTTP-аутентификация, этой переменной присваивается имя пользователя, предоставленное пользователем.
'PHP_AUTH_PW' - Когда выполняется HTTP-аутентификация, этой переменной присваивается пароль, предоставленный пользователем.
'AUTH_TYPE' - Когда выполняется HTTP-аутентификация, этой переменной присваивается тип аутентификации, который используется.
'PATH_INFO' - Содержит любой предоставленный пользователем путь, содержащийся после имени скрипта, но до строки запроса, если доступно. Например, если текущий скрипт запрошен по URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, то переменная $_SERVER['PATH_INFO'] будет содержать /some/stuff.
'ORIG_PATH_INFO' - Исходное значение переменной 'PATH_INFO' до начала обработки PHP.
Пример:
<?php echo $_SERVER['SERVER_NAME']; ?>
Выведет:
www.examplepage.com
Пример:
<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; ?>
Выведет:
http://www.examplepage.com/index.php?lang=en
Січ 152012
 

PHP округление числа

В данной статье будет описано как в PHP округляются числа. В данном случае понадобятся три функции: round – функция округляет до ближайшего целого числа, ceil – функция округляет до ближайшего целого и floor -округляет в меньшую торону.
Рассмотрим по-порядку:

round()

Синтаксис:

float round ( float value [, int precision] )

Первый параметр дробное число. Второй параметр необязательный. В нём указывается точность округления.

Примеры использования и результаты выполнения:

echo round(3.7);     // 4
echo round(3.1);     // 3
echo round(4.5);     // 5
echo round(7.4999);  // 7
echo round(1.46,1);  // 1.5
echo round(1.7384,3);// 1.738
echo round(4939,-1); // 4940
echo round(3.5,1);   // 3.5
echo round(1244,-2); // 1200

Округление числа до сотых:

echo round(2.467,2); // 2.47

Округление числа до целого:

echo round(3.825); // 4

ceil() – округление в большую сторону

Синтаксис:

float ceil ( float value )

Один параметр, которому передаётся дробь. На выходе целое число, округлённое

в большую сторону.

Примеры использования и результаты выполнения:

echo ceil(3.7);  // 4
echo ceil(3.001);// 4
echo ceil(4.5);  // 5
echo ceil(8.0);  // 8

floor() – округление в меньшую сторону

Синтаксис:

float floor(float value)

Имеет один параметр для передачи дроби. Выходит целое число, округлённое

в меньшую сторону, либо попросту остается целое число.

Примеры использования и результаты выполнения:

echo floor(3.99); // 3
echo floor(3.023);// 3
echo floor(4.4);  // 4
echo floor(9.0);  // 9
Гру 272011
 

Чтение файла file() быстрее, чем fopen+цикл – ускорение 40%

Для того, чтобы прочитать в массив $x файл размером 1Мб (100 000 строк по 10 байт) можно воспользоваться двумя вариантами: чтение файла с помощью file(), либо традиционным методом fopen/fgets. Разумеется, для файлов разного объема и содержимого скорость может меняться. Но в данном примере статистика такова:file("1Mb_file.txt") работает на 40% быстрее, чем:

 

 

   $f=fopen("1Mb_file.txt","r") or die(1);
   while($x[]=fgets($f,1000));
   fclose($f);

Аналогичные варианты

 

 

   $f=fopen("1Mb_file.txt","r") or die(1);
   while($s=fgets($f,1000)) $x[]=$s;
   fclose($f);

или

 

   $f=fopen("1Mb_file.txt","r") or die(1);
   while(!feof($f))) $x[]=fgets($f,1000);
   fclose($f);

работают еще медленнее (во втором случае лишняя функция feof() заметно снижает скорость). Тот же тест, но на 15Мб файле (100 000 строк по 150 байт) показывает разницу в 50%, в пользу file(). Тест проводился так, чтобы исключить фоновый своппинг во время работы из-за предшествующих команд создания/чтения таких больших файлов. Подсчитать тоже самое на очень маленьких файлах в 1-2 Кб не представляется возможным, т.к. операцию чтения нельзя повторять в течении одного теста, операции чтения будут кешироваться…

Гру 272011
 

Циклы: for, foreach, while, count/sizeof() – ускорение 15%-30%

В начале программы создается массив $test из целых чисел (100 000 элементов). Потом один раз запускаются приведенные ниже примеры. Цикл проходит данный массив 3-мя способами (разными циклами) и выполняет кое-какие операции. Не выполнять в цикле ничего нельзя, ибо это будет уже совсем не реальный тест.

  1. {$x=0; foreach($test as $n)                          { $x=sprintf("test%08i",$i);        }}
  2. {$x=0; for ($it=0; $it<100000; $it++)                { $x=sprintf("test%08i",$i);        }}
  3. {$x=0; $it=0; while($it<100000)                      { $x=sprintf("test%08i",$i); $it++; }}
  4. {$x=0; for ($it=0; $it<count($test); $it++)          { $x=sprintf("test%08i",$i);        }}
  5. {$x=0; $it=0; while($it<count($test))                { $x=sprintf("test%08i",$i); $it++; }}
  6. {$x=0; $co=count($test); for ($it=0; $it<$co; $it++) { $x=sprintf("test%08i",$i);        }}
  7. {$x=0; $co=count($test); $it=0; while($it<$co)       { $x=sprintf("test%08i",$i); $it++; }}

 

счетчик кол-во
вызовов
общее
вpемя
сpеднее
вpемя
% от min % от max
test N1 1 12.0313 12.0313 154.4% 100.0%
test N2 1 4.7290 4.7290 00.0% 39.3%
test N3 1 4.7712 4.7712 00.9% 39.7%
test N4 1 10.2847 10.2847 117.5% 85.5%
test N5 1 10.3466 10.3466 118.8% 86.0%
test N6 1 9.1271 9.1271 93.0% 75.9%
test N7 1 9.1409 9.1409 93.3% 76.0%

Почему sprintf, а не реальное echoecho использовать нельзя, т.к. от него будет немерянный буфер (OUTPUT в браузер или консоль).

Теперь о деле. Бесспорный вывод – использование foreach сильно тормозит дело, а между for и while большой разницы нет. (На голом тесте for/while/foreach {..}тормоза foreach – 30%). Это не удивительно, т.к. foreach делает копию массива, на что тратиться масса времени (хотя это только слухи).

Вывод с count() не столь очевиден, потому что от разного текста в цикле % тормознутости от самого быстрого варианта резко возрастает… Я взял цикл с небольшой нагрузкой – проход по огромному массиву $test + форматирование функцией sprintf. Как видите, варинты с count() и заменяющей эту функцию перемнной $co различаются на 10% по скорости между собой (не смотрите на варинант с константой в 100000, заранее знать кол-во элементов невозможно).

Вывод о не ассоциативных массивах: 1) foreach существенно замедляет работу 2) использование count() в простых циклах – замедленение 10%. Но на сложных циклах потери от лишних запусков count() будут абсолютно незаметны, так что ситуация не очевидна.

Сравнение count() и sizeof().

Судя по мануалу – это алиасы. Об этом написано на страницах самих функций и дополнительной странице “Appendex => Aliases list”. Что же мы видим на массиве в 100000 элементов:

  1. {$x=0; for ($it=0; $it<count($test); $it++)  { $x=sprintf("test%08i",$test[$it]);}}
  2. {$x=0; for ($it=0; $it<sizeof($test); $it++) { $x=sprintf("test%08i",$test[$it]);}}

 

счетчик кол-во
вызовов
общее
вpемя
сpеднее
вpемя
% от min % от max
test N1 1 3.0087 3.0087 15.7% 100.0%
test N2 1 2.5998 2.5998 00.0% 86.4%

Пусть тесты будут иметь погрешности… Но результат один – count() заметно отстает по скорости от sizeof()! Хм, я бы к записи в мануале сделал приписку: “The sizeof() function is an alias for count(), but последний сильно тормозит!”

Если кол-во элементов в массиве меньше 65000 (64К), то эти функции по скорости практически не различимы. Тут вывод простой – переходим на использованиеsizeof(), как ускоренного алиаса count(). Это принесет свои результаты на огромных массивах.

Ассоциативные массивы: тестирование разных способов перебора

С ними наблюдается таже проблема: на разных по величине массивах разные функции эффективны, но лучше всех foreach!

Массив в 200 элементов и 1000 повторов программы:

  1. {$x=0; foreach($test as $k=>$v) { $x=sprintf("%s=>%s\n",$k,$v);                                                           }}
  2. {$x=0; reset($test); while (list($k, $v) = each($test)) { $x=sprintf("%s=>%s\n",$k,$v);                                   }}
  3. {$x=0; $k=array_keys($test); $co=sizeof($k); for ($it=0; $it<$co; $it++) { $x=sprintf("%s=>%s\n",$k[$it],$test[$k[$it]]); }}
  4. {$x=0; reset($test); while ($k=key($test)) { $x=sprintf("%s=>%s\n",$k,current($test)); next($test);                       }}

 

счетчик кол-во
вызовов
общее
вpемя
сpеднее
вpемя
% от min % от max
test N1 1 8.1222 8.1222 00.0% 78.7%
test N2 1 10.3221 10.3221 27.1% 100.0%
test N3 1 9.7921 9.7921 20.6% 94.9%
test N4 1 8.9711 8.9711 10.5% 86.9%

Тоже самое, но массив в 5000 элементов и 200 повторов:

 

 

счетчик кол-во
вызовов
общее
вpемя
сpеднее
вpемя
% от min % от max
test N1 1 14.4473 14.4473 00.0% 67.2%
test N2 1 18.6801 18.6801 29.3% 86.9%
test N3 1 21.5056 21.5056 48.9% 100.0%
test N4 1 15.8514 15.8514 09.7% 73.7%

Опять тоже самое, но массив в 100 000 элементов и без повторов:

 

 

счетчик кол-во
вызовов
общее
вpемя
сpеднее
вpемя
% от min % от max
test N1 1 3.5116 3.5116 00.0% 82.8%
test N2 1 3.9724 3.9724 13.1% 93.6%
test N3 1 4.2436 4.2436 20.8% 100.0%
test N4 1 4.0026 4.0026 14.0% 94.3%

Другие тесты на холостых циклах тоже показывают преимущество foreach.

Резюме:

  • sizeof() лучше, чем count()
  • в циклах sizeof лучше вообще заменить на переменную
  • for и while практически не отличимы
  • для перебора простых индексных массивов нужно использовать for или while
  • для перебора ассоциативных массивов нужно использотьва foreach