斷斷續續地學習了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>;$i<<span style="color: #800080;">2</span>;$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($userNane);$i++<span>){</span>
<span>/**利用count()函数来遍历数组的元素个数**/ </span>
<span> echo $</span>userNane<span>[$i].</span><span style="color: #800000;">"</span><span style="color: #800000;"><br /><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><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><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($food); $i++<span style="color: #000000;">) { </span><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>
看註釋就一目了然啦,除了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($food); $i++<span style="color: #000000;">) { </span><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>
到此,遍歷就算是結束啦~
如有錯誤,歡迎指針~
麼麼噠,睡覺去鳥...