saen
Постоялец
- Регистрация
- 6 Авг 2006
- Сообщения
- 756
- Реакции
- 129
с чего ты взял?foreach должен все таки пошустрей работать чем
for($i=0, $cn=count($file_array); $i < $cn; $i++)
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
с чего ты взял?foreach должен все таки пошустрей работать чем
for($i=0, $cn=count($file_array); $i < $cn; $i++)
на самом деле foreach в переборке массивов действительно быстрее чем for, как минимум потому, что в for вводятся дополнительные операции в интерпретаторе, а в foreach те же операции выполняются на более низком уровне, что их явно ускоряет, вот сам только что эксперимента ради сделал тесты:с чего ты взял?
$arr = array(1,2,3,4,5,6,7,8,9,10);
foreach($arr as $key => $val)
{
}
[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,
<?php
$arr = array(1,2,3,4,5,6,7,8,9,10);
for($i=0, $cn=count($arr); $i < $cn; $i++)
{
}
[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, но возможно код
станет более наглядней, и красивей, хотя конечно, это все зависит
как накодить )
*** скрытое содержание ***