首页 >php教程 >php手册 >数组与数组遍历

数组与数组遍历

WBOY
WBOY原创
2016-08-22 10:14:221354浏览

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

 

  从基础开始说起:

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

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

 

 开始写一个数组:

$userNane = array(<span style="color: #800000;">'</span><span style="color: #800000;">陈云</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">罗鑫</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">袁修成</span><span style="color: #800000;">'</span>);

 当然也可以这样写:

    $userNane[<span style="color: #800080;">0</span>] = <span style="color: #800000;">'</span><span style="color: #800000;">陈云</span><span style="color: #800000;">'</span><span style="color: #000000;">;

    $userNane[</span><span style="color: #800080;">1</span>] = <span style="color: #800000;">'</span><span style="color: #800000;">罗鑫</span><span style="color: #800000;">'</span><span style="color: #000000;">;

    $userNane[</span><span style="color: #800080;">2</span>] = <span style="color: #800000;">'</span><span style="color: #800000;">袁修成</span><span style="color: #800000;">'</span>;

 

现在来遍历这个数组

<span style="color: #0000ff;">for</span>($i = <span style="color: #800080;">0</span>;$i2;$i++<span style="color: #000000;">){
        echo $</span>userNane<span>[$i]; <br>}; <br></span><span style="color: #008000;">//</span><span style="color: #008000;">or</span> <br><br><span style="color: #0000ff;">for</span>($i = <span style="color: #800080;">0</span>;$i<count>){</count>
<span>/**利用count()函数来遍历数组的元素个数**/ </span>
<span>    echo $</span>userNane<span>[$i].</span><span style="color: #800000;">"</span><span style="color: #800000;"><br></span><span style="color: #800000;">"</span><span>; </span>
<span>};</span>

 

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

 

<span style="color: #0000ff;">foreach</span> ($userNane <span style="color: #0000ff;">as</span> $key =><span> $value) {<br>   echo $key.</span><span style="color: #800000;">'</span><span style="color: #800000;">------</span><span style="color: #800000;">'</span>.$value.<span style="color: #800000;">"</span><span style="color: #800000;"><br></span><span style="color: #800000;">"</span><span>; <br>}</span>

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

 

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

 

<meta charset="<span" style="color: #800000;">"<span style="color: #800000;">UTF-8</span><span style="color: #800000;">"</span>>
<span style="color: #000000;">php
    $userNane[</span><span style="color: #800000;">'</span><span style="color: #800000;">陈云</span><span style="color: #800000;">'</span>] = <span style="color: #800080;">19</span><span style="color: #000000;">;

    $userNane[</span><span style="color: #800000;">'</span><span style="color: #800000;">罗鑫</span><span style="color: #800000;">'</span>] = <span style="color: #800080;">21</span><span style="color: #000000;">;

    $userNane[</span><span style="color: #800000;">'</span><span style="color: #800000;">袁</span><span style="color: #800000;">'</span>] = <span style="color: #800080;">11</span><span style="color: #000000;">;

    $a</span>=each($userNane);     <span style="color: #008000;">//</span><span style="color: #008000;">指针下移</span>
    echo $a[<span style="color: #800000;">"</span><span style="color: #800000;">key</span><span style="color: #800000;">"</span>].<span style="color: #800000;">'</span><span style="color: #800000;">----</span><span style="color: #800000;">'</span>.$a[<span style="color: #800000;">"</span><span style="color: #800000;">value</span><span style="color: #800000;">"</span>].<span style="color: #800000;">'</span><span style="color: #800000;"><br></span><span style="color: #800000;">'</span><span style="color: #000000;">;

    $a</span>=<span style="color: #000000;">each($userNane);
    echo $a[</span><span style="color: #800000;">"</span><span style="color: #800000;">key</span><span style="color: #800000;">"</span>].<span style="color: #800000;">'</span><span style="color: #800000;">----</span><span style="color: #800000;">'</span>.$a[<span style="color: #800000;">"</span><span style="color: #800000;">value</span><span style="color: #800000;">"</span>].<span style="color: #800000;">'</span><span style="color: #800000;"><br></span><span style="color: #800000;">'</span><span style="color: #000000;">;

    $a</span>=<span style="color: #000000;">each($userNane);
    echo $a[</span><span style="color: #800000;">"</span><span style="color: #800000;">key</span><span style="color: #800000;">"</span>].<span style="color: #800000;">'</span><span style="color: #800000;">----</span><span style="color: #800000;">'</span>.$a[<span style="color: #800000;">"</span><span style="color: #800000;">value</span><span style="color: #800000;">"</span>].<span style="color: #800000;">'</span><span style="color: #800000;"><br></span><span style="color: #800000;">'</span><span style="color: #000000;">;


    </span><span style="color: #008000;">/*</span><span style="color: #008000;">while (!!$a=each($userNane)) {         
    //根据while循环判断,条件内为真则继续执行循环体,为假则退出循环,两个!!将数组转化为布尔值,存在则代表 1
        echo $a["key"].'----'.$a["value"].'<br>';
    }</span><span style="color: #008000;">*/</span>

    <span style="color: #008000;">//</span><span style="color: #008000;">each()函数返回的是一个数组

    </span><span style="color: #008000;">//</span><span style="color: #008000;">each后所在数组的“每一个”键值会被重新包装成一个新的数组,里面有四条数据,key and value,0 and 1

    </span><span style="color: #008000;">//</span><span style="color: #008000;">each完一次后指针下移一位,默认开始是第一位,也就是指向数组的第二条键值对,第二条键值对被重新包装秤数组</span>

?>

 

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

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

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

<span style="color: #008000;">$userNane = array(1,2,3);</span>

    <span style="color: #008000;">list($a,$b,$c) = $userNane;

    echo $a; </span> <span style="color: #008000;">//</span><span style="color: #008000;">1

</span>

为什么打印出1呢,

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

 

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

$userNane[<span style="color: #800000;">'</span><span style="color: #800000;">陈云</span><span style="color: #800000;">'</span>] = <span style="color: #800080;">19</span><span style="color: #000000;">;

$userNane[</span><span style="color: #800000;">'</span><span style="color: #800000;">罗鑫</span><span style="color: #800000;">'</span>] = <span style="color: #800080;">21</span><span style="color: #000000;">;

$userNane[</span><span style="color: #800000;">'</span><span style="color: #800000;">袁</span><span style="color: #800000;">'</span>] = <span style="color: #800080;">11</span><span style="color: #000000;">;

list($name,$age) </span>=<span style="color: #000000;"> each($userNane);

    echo $name;  </span><span style="color: #008000;">//</span><span style="color: #008000;">陈云</span>
    echo $age;  <span style="color: #008000;">//</span><span style="color: #008000;">19<br><br><br></span>

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


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

<span style="color: #008000;"> </span>

 

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

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

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

 

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

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

list($name,$age) =<span style="color: #000000;"> each($userNane);
    echo $name;  </span><span style="color: #008000;">//</span><span style="color: #008000;">陈云</span>
    echo $age;  <span style="color: #008000;">//</span><span style="color: #008000;">19</span><span style="color: #000000;">

    list($name,$age) </span>=<span style="color: #000000;"> each($userNane);
    echo $name;  </span><span style="color: #008000;">//</span><span style="color: #008000;">罗鑫</span>
    echo $age;  <span style="color: #008000;">//</span><span style="color: #008000;">21</span>
<span style="color: #000000;">

    reset($userNane);<br>
    list($name,$age) </span>=<span style="color: #000000;"> each($userNane);
    echo $name;  </span><span style="color: #008000;">//</span><span style="color: #008000;">陈云</span>
    echo $age;  <span style="color: #008000;">//</span><span style="color: #008000;">19</span>

 

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

<meta charset="<span" style="color: #800000;">"<span style="color: #800000;">UTF-8</span><span style="color: #800000;">"</span>>
<span style="color: #000000;">php
    $number </span>= array(<span style="color: #800080;">2</span>,<span style="color: #800080;">5</span>,<span style="color: #800080;">1</span>,<span style="color: #800080;">6</span>,<span style="color: #800080;">4</span>,<span style="color: #800080;">1</span>,<span style="color: #800080;">2</span>,<span style="color: #800080;">6</span><span style="color: #000000;">);

    $newNumber </span>=<span style="color: #000000;"> array_unique($number);

    </span><span style="color: #008000;">//</span><span style="color: #008000;">array_unique移除数组中重复的值,并且当时就创建了一个新的数组,
    </span><span style="color: #008000;">//</span><span style="color: #008000;">新的数组数据原封不动,老的数组就已经移除掉了重复的值</span>
<span style="color: #000000;">
    print_r($newNumber);



    $number </span>= array(<span style="color: #800000;">"</span><span style="color: #800000;">陈云</span><span style="color: #800000;">"</span>=><span style="color: #800080;">12</span>,<span style="color: #800000;">"</span><span style="color: #800000;">罗鑫</span><span style="color: #800000;">"</span>=><span style="color: #800080;">18</span><span style="color: #000000;">);

    var_dump(array_flip($number));

    </span><span style="color: #008000;">//</span><span style="color: #008000;">array_flip()交换数组中的键和值</span>

    
?>

具有作用看注释~

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

看代码:

<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].'|';   //数组里的 <span style="color: #ff6600;">第i个数组</span> 中的 <span style="color: #ff6600;">第j个元素</span>,这样理解第二维的数组
		}

		echo "<br />";
	}

	
?>

  

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

此时问题来了,要是带有键值对二维数组呢?如何让遍历。

见代码:

    <span style="color: #008000;">//</span><span style="color: #008000;">遍历二位数组带key的</span>
    $food =<span style="color: #000000;"> array(
            array(</span><span style="color: #800000;">'</span><span style="color: #800000;">产品</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">苹果</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">价格</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">12</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">口味</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">香</span><span style="color: #800000;">'</span><span style="color: #000000;">),
            array(</span><span style="color: #800000;">'</span><span style="color: #800000;">产品</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">鸡肉</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">价格</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">13</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">口味</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">甜</span><span style="color: #800000;">'</span><span style="color: #000000;">),
            array(</span><span style="color: #800000;">'</span><span style="color: #800000;">产品</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">脉动</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">价格</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">14</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">口味</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">酸</span><span style="color: #800000;">'</span><span style="color: #000000;">)
        );

    </span><span style="color: #008000;">//</span><span style="color: #008000;">利用 foreach() 来遍历</span>

    <span style="color: #0000ff;">for</span> ($i=<span style="color: #800080;">0</span>; $i <count style="color: #000000;">) { 
        <span style="color: #0000ff;">foreach</span> ($food[$i] <span style="color: #0000ff;">as</span> $key =><span style="color: #000000;"> $value) {
            </span><span style="color: #008000;">//</span><span style="color: #008000;">echo $food[$i][$key].'|';   </span><span style="color: #008000;">//</span><span style="color: #008000;">只获取到数组里键 对应的值</span>
            echo $key.<span style="color: #800000;">'</span><span style="color: #800000;">---</span><span style="color: #800000;">'</span>.$value;   <span style="color: #008000;">//</span><span style="color: #008000;">打印出了二维数组的键and值</span>
<span style="color: #000000;">        }

        echo </span><span style="color: #800000;">"</span><span style="color: #800000;"><br></span><span style="color: #800000;">"</span><span style="color: #000000;">;
    }</span></count>

 

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

见代码:

    <span style="color: #008000;">//</span><span style="color: #008000;">遍历二位数组带key的</span>
    $food =<span style="color: #000000;"> array(
            array(</span><span style="color: #800000;">'</span><span style="color: #800000;">产品</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">苹果</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">价格</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">12</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">口味</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">香</span><span style="color: #800000;">'</span><span style="color: #000000;">),
            array(</span><span style="color: #800000;">'</span><span style="color: #800000;">产品</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">鸡肉</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">价格</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">13</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">口味</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">甜</span><span style="color: #800000;">'</span><span style="color: #000000;">),
            array(</span><span style="color: #800000;">'</span><span style="color: #800000;">产品</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">脉动</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">价格</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">14</span><span style="color: #800000;">'</span>,<span style="color: #800000;">'</span><span style="color: #800000;">口味</span><span style="color: #800000;">'</span>=><span style="color: #800000;">'</span><span style="color: #800000;">酸</span><span style="color: #800000;">'</span><span style="color: #000000;">)
        );


    </span><span style="color: #008000;">//</span><span style="color: #008000;">利用 list--->each() 来遍历</span>

    <span style="color: #0000ff;">for</span> ($i=<span style="color: #800080;">0</span>; $i <count style="color: #000000;">) { 
        <span style="color: #0000ff;">while</span> ( list($key,$value) = each($food[$i])) {    <span style="color: #008000;">//</span><span style="color: #008000;">each后的数组拆分赋给list()里的变量($key,$value)</span>
            echo $key.<span style="color: #800000;">'</span><span style="color: #800000;">---</span><span style="color: #800000;">'</span>.$value.<span style="color: #800000;">'</span><span style="color: #800000;">|</span><span style="color: #800000;">'</span>;   <span style="color: #008000;">//</span><span style="color: #008000;">打印出了二维数组的键值</span>
<span style="color: #000000;">        }

        echo </span><span style="color: #800000;">"</span><span style="color: #800000;"><br></span><span style="color: #800000;">"</span><span style="color: #000000;">;
    }</span></count>

 

 

到此,遍历就算是结束啦~

如有错误,欢迎指针~

么么哒,睡觉去鸟...

 

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn