我想循环输出数组$row中的值,听说用foreach输出数组最快,但是foreach每次循环时都要as给一个新变量,然后用新变量输出才行,感觉这样好麻烦啊,速度会不会比用for要慢?
foreach($result as $row) {
echo $row[0].'<br />';
}
以上代码我为了防止又新建一个新量,我这样做行不行?有没有什么弊端?
foreach($result as $sql_result) {
echo $result[0].'<br />';
}

解决方案 »

  1.   

    通常认为,foreach涉及到值复制,一定会比while慢,但实际上,如果仅仅是在循环里进行数组的读操作,那么foreach是很快的,这是因为PHP采用的复制机制是“引用计数,写时复制”,这样看来,foreach的高效读操作就不难理解了.另,我根本看不懂LZ为了防止又新建一个新量,到底做了什么
      

  2.   

    楼主大哥
    foreach($result as $row) { 
    echo $row[0].' <br />'; 
    } result至少是二维的$result[][],上面的语句才成立
    这样每次循环相当于
    $row=$result[0]
    $row=$result[1]
    $row=$result[2]
    $row=$result[3]
    循环中的$row[0]相当于$result[i][0]因此你第二种写法肯定不行
      

  3.   

    不好意思,我写错了foreach($result as $row) {
    echo $row.' <br />';
    }
    以上代码我为了防止又新建一个新量,我这样做行不行?有没有什么弊端?
    foreach($result as $result) {
    echo $result.' <br />';
    }
      

  4.   


    var_dump($result);
    foreach($result as $row) { 
        var_dump($row);
    } lz先理解了数组结构,再研究怎么用foreach..
    手册~~~手册~~~
      

  5.   

    如果是数据库,为何不用while处理?判断EOF就好了。
      

  6.   

    第二种写法就是错误的,按我的理解是$result是一个数组,foreach根据$result的内容逐个循环输出赋值给$sql_result
    就等于把$result拆分成字符串$sql_result[0]&$sql_result[1]&$sql_result[2]&……
    然后输出这样子
    $result[0]没意义
      

  7.   

    楼上正确
    如果你觉得foreach不爽,就使用while 或者for就行了
    不也挺好用的吗
      

  8.   

    楼主是想当然了,“实践是检验真理的唯一标准”
    <?php
    $ar = range(0, 1000);speed(1);
    foreach($ar as $v) {
      $r = $v;
    }
    echo '<br />foreach '.speed();speed(1);
    for($i=0;$i<count($ar);$i++) {
      $r = $ar[$i];
    }
    echo '<br />for '.speed();speed(1);
    $i = count($ar);
    while($i--) {
      $r = $ar[i];
    }
    echo '<br />while '.speed();
    ?>结果:
    foreach 153
    for 607
    while 2,461speed 函数代码
    if(! function_exists('speed')):
    function speed($mode=0) {
            static $t = 0;
            list($usec, $sec) = explode(" ", microtime());
            if($mode) {
                    $t = $sec + $usec;
            }else {
                     return number_format(($sec + $usec - $t)*1000000);
            }
    }
    endif;
      

  9.   

    我输出的是数据库查询的结果,可是我发现在使用的时候这样做没一点问题啊?完整代码如下:
    $username='test';
    $pdo=new PDO($dsn, $db_user, $db_pwd);
    $sql_str='select id,username from users where username=?';
    $sql=$pdo->prepare($sql_str);
    $sql->bindParam(1, $username, PDO::PARAM_STR,50);
    $sql->execute();
    $row=$sql->fetchAll();    //将返回的记录赋值给一个数组变量$row
    $err_code=$sql->errorCode();
    if($err_code=='00000') {
        /*
        关键就在下面这行代码,如果用$row as $row的话,输出时就可以用$row[]来输出记录
        如果用$row as $row_print的话,那么输出就要用$row_print['...'],感觉这样多一个变量好麻烦啊
        */
        foreach($row as $row) {
            echo $row['username'];
        }
    }
      

  10.   

    唠叨的测试有意思,表明对数组操作foreach综合效率更高一些。
    因为使用for,while对数组遍历,总得计算数组行数吧?即用count函数,这得花费一次数组遍历的时间,内部再赋值,又得花费分配空间的时间.
    foreach是内部进行优化了的,对数组操作相对效率高且方便.