zoukankan      html  css  js  c++  java
  • PHP 数组的遍历的几种方式(以及foreach与for/while+each效率的比较)


    * 使用foreach遍历数组时要注意的问题:
    * 1.foreach在遍历之前会自动重置指针使用其指向第一个元素,所以foreach可以多次遍历
    * 2.foreach遍历完成之后,指针是没有指向数组的任何一个元素的,也就是此时数组没有指针指向,所以紧接着使用each遍历时没有元素输出
    * 3.foreach与for循环的效率比较:foreach要优于for,因为for需要获得数组的长度通过i++才能遍历,而foreach不需要计算数组长度
    * 4.foreach与while+each遍历的效率比较:
    *         在对数组进行‘读’操作时:foreach比while+each快
    *          在对数组进行‘写’操作时:while+each比froeach快
    *          之所以会出现这样的结果,是因为:PHP内核的采用的复制机制是"引用计数,写时复制",
    *          也就是说变量的内容在没有改变之前,只计算有多少个变量名指向这块内存空间,在改变时才会真正的复制,并重新进行内存分配
    *          总结:foreach可用于读取大量数据,但不适用于读取时对大量数据做修改操作

    * 5.foreach与each的区别:
    * each遍历数组时,是从当前的数组指针开遍历,相当于next,当数组遍历完成后,
    * 和foreach一样,指针已经指向了数组元素的最后一个的下一个,也是就null,数组失去了指针指向
    * 但是和froeach不一样的是,each遍历之前,不会重置数组指针,而foreach会,each是对原数组操作,foreach是对拷贝的数组操作
    *

    * 注意:foreach是对数组的拷贝进行操作,foreach 不支持用“@”来抑制错误信息的能力
    *
    * 关于"引用计数,写时复制"的参考文章:
    * PHP内核探索:写时复制COW机制:http://www.nowamagic.net/librarys/veda/detail/1454

    * PHP内核探索:变量的引用与计数规则:http://www.nowamagic.net/librarys/veda/detail/1581
    */

    <?php
    
        $arr3=array ('bian'=>'编','cheng'=>'程','shi'=>'世','jie'=>'界',1,2,3);
    
        $arr2=array (5,4,2,6,1,8);
    
        echo '使用 指针函数 遍历循环数组中的值: ';
        echo("
    ");
    
        echo current($arr2)."
    ";
        $k=0;
        while ($k<(count($arr2)-1)) {
            $k++;
            echo next($arr2)."
    ";
        }
    
        echo '使用 for 遍历循环数组中的值: ';
        echo("
    ");
        for ($i=0; $i <count($arr2) ; $i++) { 
            echo $arr2[$i]."
    ";
        }
    
        echo '使用 foreach 遍历循环数组中的值: ';
        echo("
    ");
        foreach ($arr2 as $key => $value) {
            echo $key."===".$value."
    ";
        }
        
        echo   "当前元素:".current($arr2)."
    ";
        reset($arr2);
        echo '使用 while---each 遍历循环数组中的值: ';
        echo("
    ");
        while ($a= each($arr2)) 
        {
            //echo $a[0]."===".$a[1]."
    ";
            echo $a["key"]."===".$a["value"]."
    ";
        }
    
        reset($arr2);
        echo '使用 while--list--each 遍历循环数组中的值: ';
        echo("
    ");
        while (list($key,$val)= each($arr2)) 
        {
            echo $key."=".$val."
    ";
        }
    //结果>>>:
    //使用 指针函数 遍历循环数组中的值: 
    // 5
    // 4
    // 2
    // 6
    // 1
    // 8
    // 使用 for 遍历循环数组中的值: 
    // 5
    // 4
    // 2
    // 6
    // 1
    // 8
    // 使用 foreach 遍历循环数组中的值: 
    // 0===5
    // 1===4
    // 2===2
    // 3===6
    // 4===1
    // 5===8
    // 当前元素:
    // 使用 while---each 遍历循环数组中的值: 
    // 0===5
    // 1===4
    // 2===2
    // 3===6
    // 4===1
    // 5===8
    // 使用 while--list--each 遍历循环数组中的值: 
    // 0=5
    // 1=4
    // 2=2
    // 3=6
    // 4=1
    // 5=8
    ?>

     

  • 相关阅读:
    MyBatis总结(一)
    MyBatis简介
    数据持久化与ORM
    主流框架介绍
    JSP数据交互(一)
    tomcat端口被占用
    动态网页开发基础
    jQuery内容
    正则表达式
    初始Mybatis
  • 原文地址:https://www.cnblogs.com/lt-style/p/3498618.html
Copyright © 2011-2022 走看看