zoukankan      html  css  js  c++  java
  • 数组与数组遍历

      断断续续地学习了php有一段时间了,总是不能很好地理解,如今把数组和遍历数组整理出来。

      从基础开始说起:

      php数组分为索引数组,和关系型数组

      索引数组就是下标从0,1,2,3,4...开始,而关系型数组则非,理解为带key的(key为自定义的键)

     开始写一个数组:

    $userNane = array('陈云','罗鑫','袁修成');

     当然也可以这样写:

        $userNane[0] = '陈云';
    
        $userNane[1] = '罗鑫';
    
        $userNane[2] = '袁修成';

    现在来遍历这个数组

    for($i = 0;$i<2;$i++){
            echo $userNane[$i]; 
    };
    //or

    for($i = 0;$i<count($userNane);$i++){
    /**利用count()函数来遍历数组的元素个数**/ 
        echo $userNane[$i]."<br />"; 
    };

    此时如果数组的下标如果不是从0开始(非索引数组),那么单单只靠for循环和count()是没用的,此时我们的好朋友foreach()就来了。

    foreach ($userNane as $key => $value) {
       echo $key.
    '------'.$value."<br />";
    }

    $key代表键(也就是类似于索引下标0,1,2...)$value代表键值(下标)的值,
    $key与$value是可以随意更变名字的,只是约定俗成用这两个变量进行表示

    除了foreach()外我们还有一个好朋友也可以来遍历数组,那就是each()

    <meta charset="UTF-8">
    <?php
        $userNane['陈云'] = 19;
    
        $userNane['罗鑫'] = 21;
    
        $userNane[''] = 11;
    
        $a=each($userNane);     //指针下移
        echo $a["key"].'----'.$a["value"].'<br />';
    
        $a=each($userNane);
        echo $a["key"].'----'.$a["value"].'<br />';
    
        $a=each($userNane);
        echo $a["key"].'----'.$a["value"].'<br />';
    
    
        /*while (!!$a=each($userNane)) {         
        //根据while循环判断,条件内为真则继续执行循环体,为假则退出循环,两个!!将数组转化为布尔值,存在则代表 1
            echo $a["key"].'----'.$a["value"].'<br />';
        }*/
    
        //each()函数返回的是一个数组
    
        //each后所在数组的“每一个”键值会被重新包装成一个新的数组,里面有四条数据,key and value,0 and 1
    
        //each完一次后指针下移一位,默认开始是第一位,也就是指向数组的第二条键值对,第二条键值对被重新包装秤数组
    
    ?>

    关于each()介绍看注释就明白了,each()完数组,数组里的每一个元素(键值对)都会被重新包装成一个新的数组,里面有四条数据。

    但是这样的遍历太麻烦了,又相当的low..

    此时each()的好朋友list()登场啦,首先介绍一下list():

    $userNane = array(1,2,3);
    
        list($a,$b,$c) = $userNane;
    
        echo $a;  //1
    
    

    为什么打印出1呢,

    是这样子的,list()函数将数组中的赋给一些变量,对应着(按照数组循序)把$userNane数组里的元素分别赋值给$a,$b,$c

    此时理解了list(),配上它的好朋友each()就能很便捷地遍历数组了

    $userNane['陈云'] = 19;
    
    $userNane['罗鑫'] = 21;
    
    $userNane[''] = 11;
    
    list($name,$age) = each($userNane);
    
        echo $name;  //陈云
        echo $age;  //19


    list($name,$age) = each($userNane);

    
    

      echo $name; //罗鑫
      echo $age; //21

     

    因为each完后的数组里的元素被重新包装成一个新的数组,每个新的数组有四条数据,

    此时每个数据有两个对应的key and value,此时key,value不能用,但是 0 和 1 就派上用场了,

    借用它把$userNane里的新元素数组里的0(key)赋给$name身上,1(value)赋值给$age身上

    因为each()完后数组指针将下移一位,如果在继续list--each的话就会打印出我的朋友袁修成的信息,

    此时我想重新打印第一个,则要用到reset()函数了,它的作用是将数组指针重置到第一位

    list($name,$age) = each($userNane);
        echo $name;  //陈云
        echo $age;  //19
    
        list($name,$age) = each($userNane);
        echo $name;  //罗鑫
        echo $age;  //21
    
    
        reset($userNane);
    list($name,$age)
    = each($userNane); echo $name; //陈云 echo $age; //19

    到这里介绍一下两个好用的数组函数:

    <meta charset="UTF-8">
    <?php
        $number = array(2,5,1,6,4,1,2,6);
    
        $newNumber = array_unique($number);
    
        //array_unique移除数组中重复的值,并且当时就创建了一个新的数组,
        //新的数组数据原封不动,老的数组就已经移除掉了重复的值
    
        print_r($newNumber);
    
    
    
        $number = array("陈云"=>12,"罗鑫"=>18);
    
        var_dump(array_flip($number));
    
        //array_flip()交换数组中的键和值
    
        
    ?>

    具有作用看注释~

    太晚了,人有点累了,不不不,我亲爱的二维数组还没遍历呢,怎能睡觉呢,不可以!!!

    看代码:

    <meta charset="UTF-8">
    <?php
    	//遍历二维数组
    	$food = array(
    			array('苹果','香蕉','梨子'),
    			array('鸡肉','猪肉','牛肉'),
    			array('脉动','快线','果粒橙'),
    		);
    
    	for ($i=0; $i <count($food); $i++) { 
    		for ($j=0; $j <count($food[$i]);$j++) { 
    			echo $food[$i][$j].'|';   //数组里的 第i个数组 中的 第j个元素,这样理解第二维的数组
    		}
    
    		echo "<br />";
    	}
    
    	
    ?>
    

      

    二维数组是啥?这里你可以把他理解为数组里的数组,上述代码就是数组里有三个数组。

    此时问题来了,要是带有自定义键的二维数组呢?如何遍历。

    见代码:

        //遍历二位数组带自定义key的
        $food = array(
                array('产品'=>'苹果','价格'=>'12','口味'=>''),
                array('产品'=>'鸡肉','价格'=>'13','口味'=>''),
                array('产品'=>'脉动','价格'=>'14','口味'=>'')
            );
    
        //利用 foreach() 来遍历
    
        for ($i=0; $i <count($food); $i++) { 
            foreach ($food[$i] as $key => $value) {
                //echo $food[$i][$key].'|';   //只获取到数组里键 对应的值
                echo $key.'---'.$value;   //打印出了二维数组的键and值
            }
    
            echo "<br />";
        }

    看注释就一目了然啦,除了foreach() 来遍历,我们的情侣搭档list---each也是可以实现的

    见代码:

        //遍历二位数组带key的
        $food = array(
                array('产品'=>'苹果','价格'=>'12','口味'=>''),
                array('产品'=>'鸡肉','价格'=>'13','口味'=>''),
                array('产品'=>'脉动','价格'=>'14','口味'=>'')
            );
    
    
        //利用 list--->each() 来遍历
    
        for ($i=0; $i <count($food); $i++) { 
            while ( list($key,$value) = each($food[$i])) {    //each后的数组拆分赋给list()里的变量($key,$value)
                echo $key.'---'.$value.'|';   //打印出了二维数组的键值
            }
    
            echo "<br />";
        }

    到此,就算是结束啦~

    么么哒,睡觉去鸟...

  • 相关阅读:
    PHP 单态设计模式
    五中常见的PHP设计模式
    PHP如何定义类及其成员属性与操作
    thinkphp 中MVC思想
    1.4 算法
    1.3 迭代器
    1.2 容器-container
    1.1 STL 概述
    2.3顺序容器-deque
    2.2 顺序容器-list
  • 原文地址:https://www.cnblogs.com/cyfm/p/5794171.html
Copyright © 2011-2022 走看看