Php 在循环条件中使用count($arr)可以吗
我想知道哪种方法更好,为什么Php 在循环条件中使用count($arr)可以吗,php,Php,我想知道哪种方法更好,为什么 $arr = array(); // some array for($i = 0; $i < count($arr); ++$i) { //some code } $arr=array();//一些数组 对于($i=0;$i
$arr = array(); // some array
for($i = 0; $i < count($arr); ++$i) {
//some code
}
$arr=array();//一些数组
对于($i=0;$i
或
$arr=array();//一些数组
$cnt=计数($arr);
对于($i=0;$i<$cnt;++$i){
//一些代码
}
谢谢你的回答 我认为您必须注意的最大区别在于第一个示例中修改数组的情况 例如: 第一:
<?php
$arr = [1,2,3];
for($i = 0; $i < count($arr); ++$i) {
//^^^^^^^^^^^ See here
echo "x". "<br />";
array_pop($arr);
}
?>
number of ops: 11
compiled vars: !0 = $arr, !1 = $i
line # * op fetch ext return operands
---------------------------------------------------------------------------------
3 0 > INIT_ARRAY ~0
1 ASSIGN !0, ~0
4 2 ASSIGN !1, 0
3 > SEND_VAR !0
4 DO_FCALL 1 $3 'count'
5 IS_SMALLER ~4 !1, $3
6 > JMPZNZ 9 ~4, ->10
7 > PRE_INC !1
8 > JMP ->3
6 9 > > JMP ->7
10 > > RETURN 1
条件:$i
条件:$i<$c
1. Iteration: 0 < 3 -> TRUE
2. Iteration: 1 < 3 -> TRUE
3. Iteration: 2 < 3 -> TRUE
4. Iteration: 3 < 3 -> FALSE
第二:
<?php
$arr = [1,2,3];
$c = count($arr);
for($i = 0; $i < $c; ++$i) {
//^^ See here
echo "x". "<br />";
array_pop($arr);
}
?>
number of ops: 12
compiled vars: !0 = $arr, !1 = $cnt, !2 = $i
line # * op fetch ext return operands
---------------------------------------------------------------------------------
3 0 > INIT_ARRAY ~0
1 ASSIGN !0, ~0
4 2 SEND_VAR !0
3 DO_FCALL 1 $2 'count'
4 ASSIGN !1, $2
5 5 ASSIGN !2, 0
6 > IS_SMALLER ~5 !2, !1
7 > JMPZNZ A ~5, ->11
8 > PRE_INC !2
9 > JMP ->6
7 10 > > JMP ->8
11 > > RETURN 1
如果您不是在寻找最后一个毫秒运行时,那么第一个示例就是更典型的一个。但是它会在每次迭代时再次检查数组的大小,因此它会稍微慢一点。但代码更易于阅读。因此,第一个是与编程器手册兼容的,而第二个已经过优化(可能太早了)。count是一个函数,用于计算数组中的元素数,您不应该重复调用该函数。若并没有空间问题,那个么您应该调用这个函数一次并存储返回的值,然后在需要的地方使用那个变量
- 了解
echo
比print
快,谢谢您的回答。你能告诉我吗。我怎样才能看到我的php代码的操作码?@不客气!(顺便说一句:你可以接受这样的答案:你得到了最大的帮助,解决了你的问题!())
x
x
x
1. Iteration: 0 < 3 -> TRUE
2. Iteration: 1 < 3 -> TRUE
3. Iteration: 2 < 3 -> TRUE
4. Iteration: 3 < 3 -> FALSE
number of ops: 11
compiled vars: !0 = $arr, !1 = $i
line # * op fetch ext return operands
---------------------------------------------------------------------------------
3 0 > INIT_ARRAY ~0
1 ASSIGN !0, ~0
4 2 ASSIGN !1, 0
3 > SEND_VAR !0
4 DO_FCALL 1 $3 'count'
5 IS_SMALLER ~4 !1, $3
6 > JMPZNZ 9 ~4, ->10
7 > PRE_INC !1
8 > JMP ->3
6 9 > > JMP ->7
10 > > RETURN 1
number of ops: 12
compiled vars: !0 = $arr, !1 = $cnt, !2 = $i
line # * op fetch ext return operands
---------------------------------------------------------------------------------
3 0 > INIT_ARRAY ~0
1 ASSIGN !0, ~0
4 2 SEND_VAR !0
3 DO_FCALL 1 $2 'count'
4 ASSIGN !1, $2
5 5 ASSIGN !2, 0
6 > IS_SMALLER ~5 !2, !1
7 > JMPZNZ A ~5, ->11
8 > PRE_INC !2
9 > JMP ->6
7 10 > > JMP ->8
11 > > RETURN 1