Добавить символы в конец строки

Данные конструкции тестировались уже не раз, вот пара ссылок

На основе их я думаю каждый сможет составить тесты для себя и тех конструкции что он использует в циклах, и
найти приемлемый вариант...
 
с чего ты взял?
на самом деле foreach в переборке массивов действительно быстрее чем for, как минимум потому, что в for вводятся дополнительные операции в интерпретаторе, а в foreach те же операции выполняются на более низком уровне, что их явно ускоряет, вот сам только что эксперимента ради сделал тесты:
PHP:
$arr = array(1,2,3,4,5,6,7,8,9,10);
foreach($arr as $key => $val)
{
}
среднее время выполнения - 1.6927719116211E-5 сек
опкоды для этой конструкции:
Код:
[root@centos xardas]# php -d vld.active=1 -d vld.execute=0 -f test.php
Finding entry points
Branch analysis from position: 0
Jump found. Position 1 = 12, Position 2 = 17
Branch analysis from position: 12
Jump found. Position 1 = 13, Position 2 = 17
Branch analysis from position: 13
Jump found. Position 1 = 12
Branch analysis from position: 12
Branch analysis from position: 17
Return found
Branch analysis from position: 17
filename:       /home/xardas/test.php
function name:  (null)
number of ops:  19
compiled vars:  !0 = $arr, !1 = $key, !2 = $val
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   INIT_ARRAY                                       ~0      1
         1      ADD_ARRAY_ELEMENT                                ~0      2
         2      ADD_ARRAY_ELEMENT                                ~0      3
         3      ADD_ARRAY_ELEMENT                                ~0      4
         4      ADD_ARRAY_ELEMENT                                ~0      5
         5      ADD_ARRAY_ELEMENT                                ~0      6
         6      ADD_ARRAY_ELEMENT                                ~0      7
         7      ADD_ARRAY_ELEMENT                                ~0      8
         8      ADD_ARRAY_ELEMENT                                ~0      9
         9      ADD_ARRAY_ELEMENT                                ~0      10
        10      ASSIGN                                                   !0, ~0
   4    11    > FE_RESET                                         $2      !0, ->17
        12  > > FE_FETCH                                         $3      $2, ->17
        13  >   ZEND_OP_DATA                                     ~5
        14      ASSIGN                                                   !2, $3
        15      ASSIGN                                                   !1, ~5
   7    16    > JMP                                                      ->12
        17  >   SWITCH_FREE                                              $2
   8    18    > RETURN                                                   1
branch: #  0; line:     2-    4; sop:     0; eop:    11; out1:  12; out2:  17
branch: # 12; line:     4-    4; sop:    12; eop:    12; out1:  13; out2:  17
branch: # 13; line:     4-    7; sop:    13; eop:    16; out1:  12
branch: # 17; line:     7-    8; sop:    17; eop:    18
path #1: 0, 12, 13, 12, 17,
path #2: 0, 12, 17,
path #3: 0, 17,
ну и соответсвенно конструкция 2:
PHP:
<?php
$arr = array(1,2,3,4,5,6,7,8,9,10);
for($i=0, $cn=count($arr); $i < $cn; $i++)
{
}
среднее время выполнения - 2.7179718017578E-5 сек (что примерно в 1.5 раза дольше)
и опкоды для нее:
Код:
[root@centos xardas]# php -d vld.active=1 -d vld.execute=0 -f test.php
Finding entry points
Branch analysis from position: 0
Jump found. Position 1 = 21, Position 2 = 20
Branch analysis from position: 21
Return found
Branch analysis from position: 20
Jump found. Position 1 = 17
Branch analysis from position: 17
Jump found. Position 1 = 15
Branch analysis from position: 15
filename:       /home/xardas/test.php
function name:  (null)
number of ops:  22
compiled vars:  !0 = $arr, !1 = $i, !2 = $cn
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   INIT_ARRAY                                       ~0      1
         1      ADD_ARRAY_ELEMENT                                ~0      2
         2      ADD_ARRAY_ELEMENT                                ~0      3
         3      ADD_ARRAY_ELEMENT                                ~0      4
         4      ADD_ARRAY_ELEMENT                                ~0      5
         5      ADD_ARRAY_ELEMENT                                ~0      6
         6      ADD_ARRAY_ELEMENT                                ~0      7
         7      ADD_ARRAY_ELEMENT                                ~0      8
         8      ADD_ARRAY_ELEMENT                                ~0      9
         9      ADD_ARRAY_ELEMENT                                ~0      10
        10      ASSIGN                                                   !0, ~0
   4    11      ASSIGN                                                   !1, 0
        12      SEND_VAR                                                 !0
        13      DO_FCALL                                      1          'count'
        14      ASSIGN                                                   !2, $3
        15  >   IS_SMALLER                                       ~5      !1, !2
        16    > JMPZNZ                                       20          ~5, ->21
        17  >   POST_INC                                         ~6      !1
        18      FREE                                                     ~6
        19    > JMP                                                      ->15
   7    20  > > JMP                                                      ->17
   9    21  > > RETURN                                                   1
branch: #  0; line:     2-    4; sop:     0; eop:    14; out1:  15
branch: # 15; line:     4-    4; sop:    15; eop:    16; out1:  21; out2:  20
branch: # 17; line:     4-    4; sop:    17; eop:    19; out1:  15
branch: # 20; line:     7-    7; sop:    20; eop:    20; out1:  17
branch: # 21; line:     9-    9; sop:    21; eop:    21
path #1: 0, 15, 21,
path #2: 0, 15, 20, 17, 15, 21,
 
Кстати, от циклов при работе с массивами можно вообще отказаться, используя функции подерживающие каллбэк
типа таких
array_map(), array_reduce(), array_filter() и uasort()
правда работать будет чуть медленей чем foreach, но возможно код
станет более наглядней, и красивей, хотя конечно, это все зависит
как накодить )
 
Кстати, от циклов при работе с массивами можно вообще отказаться, используя функции подерживающие каллбэк
типа таких
array_map(), array_reduce(), array_filter() и uasort()
правда работать будет чуть медленей чем foreach, но возможно код
станет более наглядней, и красивей, хотя конечно, это все зависит
как накодить )
*** скрытое содержание ***
это уже конечно оффтоп будет, но всеже, код совсем не наглядней будет, ибо читаемость кода падает.
 
Назад
Сверху