Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在循环条件中使用count($arr)可以吗_Php - Fatal编程技术网

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